db - add SizeTable method

This commit is contained in:
Mahdi Abu Yasmine 2023-12-02 13:40:14 +01:00
parent 04bd90a0ce
commit 5da7e42219

View File

@ -169,3 +169,31 @@ func (db *Db) SizeDb(dbname string) float32 {
})
return rs.Size
}
type TableSize struct {
Table string
Size float32
}
func (db *Db) SizeTable(dbname string, table string) []TableSize {
rs := make([]TableSize, 1)
db.onDbExec("information_schema", func(sqlDb *sql.DB) bool {
query := "SELECT table_name AS `table`, round(((data_length + index_length) / 1024 / 1024), 2) `size' FROM TABLES WHERE table_schema = ? ORDER BY (data_length + index_length) DESC GROUP BY table_schema;"
rows, err := sqlDb.Query(query, dbname)
if err != nil {
fmt.Printf("cannot get table size of db %s : %v", dbname, err)
return false
}
defer rows.Close()
for rows.Next() {
ts := TableSize{Size: -1}
if err := rows.Scan(&ts.Table, &ts.Size); err != nil {
fmt.Printf("cannot get table size of db %s : %v", dbname, err)
return false
}
rs = append(rs, ts)
}
return true
})
return rs
}