func ConvertToProto()

in pkg/datasource/sql/undo/parser/parser_protobuf.go [62:141]


func ConvertToProto(intreeLog *undo.BranchUndoLog) *BranchUndoLog {
	protoLog := &BranchUndoLog{
		Xid:      intreeLog.Xid,
		BranchID: intreeLog.BranchID,
		Logs:     []*SQLUndoLog{},
	}
	for _, undolog := range intreeLog.Logs {
		protolog := &SQLUndoLog{
			SQLType:   SQLType(undolog.SQLType),
			TableName: undolog.TableName,
		}

		if undolog.BeforeImage != nil {
			protolog.BeforeImage = &RecordImage{
				TableName: undolog.BeforeImage.TableName,
				SQLType:   SQLType(undolog.BeforeImage.SQLType),
				Rows:      []*RowImage{},
			}

			for _, row := range undolog.BeforeImage.Rows {
				protoRow := &RowImage{
					Columns: []*ColumnImage{},
				}

				for _, col := range row.Columns {
					anyValue, err := convertInterfaceToAny(col.GetActualValue())
					if err != nil {
						continue
					}

					protoCol := &ColumnImage{
						KeyType:    IndexType(col.KeyType),
						ColumnName: col.ColumnName,
						ColumnType: JDBCType(col.ColumnType),
						Value:      anyValue,
					}

					protoRow.Columns = append(protoRow.Columns, protoCol)
				}

				protolog.BeforeImage.Rows = append(protolog.BeforeImage.Rows, protoRow)
			}
		}

		if undolog.AfterImage != nil {
			protolog.AfterImage = &RecordImage{
				TableName: undolog.AfterImage.TableName,
				SQLType:   SQLType(undolog.AfterImage.SQLType),
				Rows:      []*RowImage{},
			}

			for _, row := range undolog.AfterImage.Rows {
				protoRow := &RowImage{
					Columns: []*ColumnImage{},
				}

				for _, col := range row.Columns {
					anyValue, err := convertInterfaceToAny(col.Value)
					if err != nil {
						continue
					}

					protoCol := &ColumnImage{
						KeyType:    IndexType(col.KeyType),
						ColumnName: col.ColumnName,
						ColumnType: JDBCType(col.ColumnType),
						Value:      anyValue,
					}

					protoRow.Columns = append(protoRow.Columns, protoCol)
				}

				protolog.AfterImage.Rows = append(protolog.AfterImage.Rows, protoRow)
			}
		}

		protoLog.Logs = append(protoLog.Logs, protolog)
	}
	return protoLog
}