in pkg/datasource/sql/exec/at/multi_delete_executor.go [78:128]
func (m *multiDeleteExecutor) beforeImage(ctx context.Context) ([]*types.RecordImage, error) {
selectSQL, args, err := m.buildBeforeImageSQL()
if err != nil {
return nil, err
}
var (
rowsi driver.Rows
image *types.RecordImage
records []*types.RecordImage
)
queryerCtx, ok := m.execContext.Conn.(driver.QueryerContext)
var queryer driver.Queryer
if !ok {
queryer, ok = m.execContext.Conn.(driver.Queryer)
}
if !ok {
log.Errorf("target conn should been driver.QueryerContext or driver.Queryer")
return nil, fmt.Errorf("invalid conn")
}
rowsi, err = util.CtxDriverQuery(ctx, queryerCtx, queryer, selectSQL, args)
defer func() {
if rowsi != nil {
rowsi.Close()
}
}()
if err != nil {
log.Errorf("ctx driver query: %+v", err)
return nil, err
}
tableName, err := m.getFromTableInSQL()
if err != nil {
return nil, err
}
metaData, err := datasource.GetTableCache(types.DBTypeMySQL).GetTableMeta(ctx, m.execContext.DBName, tableName)
if err != nil {
return nil, err
}
image, err = m.buildRecordImages(rowsi, metaData, types.SQLTypeDelete)
if err != nil {
log.Errorf("record images : %+v", err)
return nil, err
}
records = append(records, image)
lockKey := m.buildLockKey(image, *metaData)
m.execContext.TxCtx.LockKeys[lockKey] = struct{}{}
return records, err
}