db/gtid.go (34 lines of code) (raw):
package db
import (
"database/sql"
"github.com/pkg/errors"
"github.com/uber/storagetapper/log"
)
// GetCurrentGTID returns current gtid set for the specified db address (host,port,user,password)
func GetCurrentGTID(addr *Addr) (string, error) {
var d *sql.DB
var gtid string
var err error
if d, err = Open(addr); err == nil {
err = d.QueryRow("SELECT @@global.gtid_executed").Scan(>id)
log.E(d.Close())
}
return gtid, err
}
// GetPurgedGTID returns purged gtid set for the specified db address (host,port,user,password)
func GetPurgedGTID(addr *Addr) (string, error) {
var d *sql.DB
var gtid string
var err error
if d, err = Open(addr); err == nil {
err = d.QueryRow("SELECT @@global.gtid_purged").Scan(>id)
log.E(d.Close())
}
return gtid, err
}
// GetCurrentGTIDForDB return current gtid set for the db specified by db locator (cluster,service,db)
func GetCurrentGTIDForDB(loc *Loc, inputType string) (string, error) {
var err error
var addr *Addr
if addr, err = GetConnInfo(loc, Slave, inputType); err == nil {
return GetCurrentGTID(addr)
}
return "", errors.Wrap(err, "error resolving db info")
}