func ConvertToIntree()

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
}