in pkg/datasource/sql/undo/parser/parser_protobuf.go [143:224]
func ConvertToIntree(protoLog *BranchUndoLog) *undo.BranchUndoLog {
intreeLog := &undo.BranchUndoLog{
Xid: protoLog.Xid,
BranchID: protoLog.BranchID,
Logs: []undo.SQLUndoLog{},
}
for _, pbSqlLog := range protoLog.Logs {
undoSqlLog := undo.SQLUndoLog{
SQLType: types.SQLType(pbSqlLog.SQLType),
TableName: pbSqlLog.TableName,
}
if pbSqlLog.BeforeImage != nil {
undoSqlLog.BeforeImage = &types.RecordImage{
TableName: pbSqlLog.BeforeImage.TableName,
SQLType: types.SQLType(pbSqlLog.BeforeImage.SQLType),
Rows: []types.RowImage{},
}
for _, pbRow := range pbSqlLog.BeforeImage.Rows {
undoRow := types.RowImage{
Columns: []types.ColumnImage{},
}
for _, pbCol := range pbRow.Columns {
anyValue, err := convertAnyToInterface(pbCol.Value)
if err != nil {
continue
}
undoCol := types.ColumnImage{
KeyType: types.IndexType(pbCol.KeyType),
ColumnName: pbCol.ColumnName,
ColumnType: types.JDBCType(pbCol.ColumnType),
Value: anyValue,
}
undoRow.Columns = append(undoRow.Columns, undoCol)
}
undoSqlLog.BeforeImage.Rows = append(undoSqlLog.BeforeImage.Rows, undoRow)
}
}
if pbSqlLog.AfterImage != nil {
undoSqlLog.AfterImage = &types.RecordImage{
TableName: pbSqlLog.AfterImage.TableName,
SQLType: types.SQLType(pbSqlLog.AfterImage.SQLType),
Rows: []types.RowImage{},
}
for _, pbRow := range pbSqlLog.AfterImage.Rows {
undoRow := types.RowImage{
Columns: []types.ColumnImage{},
}
for _, pbCol := range pbRow.Columns {
anyValue, err := convertAnyToInterface(pbCol.Value)
if err != nil {
continue
}
undoCol := types.ColumnImage{
KeyType: types.IndexType(pbCol.KeyType),
ColumnName: pbCol.ColumnName,
ColumnType: types.JDBCType(pbCol.ColumnType),
Value: anyValue,
}
undoRow.Columns = append(undoRow.Columns, undoCol)
}
undoSqlLog.AfterImage.Rows = append(undoSqlLog.AfterImage.Rows, undoRow)
}
}
intreeLog.Logs = append(intreeLog.Logs, undoSqlLog)
}
return intreeLog
}