in pitr/cli/internal/pkg/shardingsphere-proxy.go [102:139]
func (ss *shardingSphereProxy) ExportMetaData() (*model.ClusterInfo, error) {
query, err := ss.db.Query(`EXPORT METADATA;`)
if err != nil {
return nil, xerr.NewCliErr(fmt.Sprintf("export meta data failure,err=%s", err))
}
var (
id string
createTime string
data string
)
if query.Next() {
if err = query.Scan(&id, &createTime, &data); err != nil {
return nil, xerr.NewCliErr(fmt.Sprintf("query scan failure,err=%s", err))
}
if err = query.Close(); err != nil {
return nil, xerr.NewCliErr(fmt.Sprintf("query close failure,err=%s", err))
}
}
if query.Err() != nil {
return nil, xerr.NewCliErr(fmt.Sprintf("query err=%s", query.Err()))
}
var out model.ClusterInfo
rawDecodedText, err := base64.StdEncoding.DecodeString(data)
if err != nil {
return nil, fmt.Errorf("base64 decode return err=%s", err)
}
if err = json.Unmarshal(rawDecodedText, &out); err != nil {
return nil, fmt.Errorf("json unmarshal return err=%s", err)
}
if out.SnapshotInfo != nil && out.SnapshotInfo.Csn == "" {
out.SnapshotInfo = nil
}
return &out, nil
}