func()

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
}