func getStats(sess sqlbuilder.Database) (map[string]int, error) { stats := make(map[string]int) res, err := sess.Driver().(*sql.DB).Query(`SHOW GLOBAL STATUS LIKE '%stmt%'`) if err != nil { return nil, err } var result struct { VariableName string `db:"Variable_name"` Value int `db:"Value"` } iter := sqlbuilder.NewIterator(res) for iter.Next(&result) { stats[result.VariableName] = result.Value } return stats, nil }
// FindTablePrimaryKeys allows sqladapter find a table's primary keys. func (d *database) FindTablePrimaryKeys(tableName string) ([]string, error) { pk := make([]string, 0, 1) stmt := exql.RawSQL(fmt.Sprintf("PRAGMA TABLE_INFO('%s')", tableName)) rows, err := d.Query(stmt) if err != nil { return nil, err } columns := []struct { Name string `db:"name"` PK int `db:"pk"` }{} if err := sqlbuilder.NewIterator(rows).All(&columns); err != nil { return nil, err } maxValue := -1 for _, column := range columns { if column.PK > 0 && column.PK > maxValue { maxValue = column.PK } } if maxValue > 0 { for _, column := range columns { if column.PK > 0 { pk = append(pk, column.Name) } } } return pk, nil }