code: func (e *InsertValues) getRow(vals []types.Datum) ([]types.Datum, error) {
  	row := make([]types.Datum, len(e.Table.Cols()))
  	hasValue := make([]bool, len(e.Table.Cols()))
  	for i, v := range vals {
  		casted, err := table.CastValue(e.ctx, v, e.insertColumns[i].ToInfo())
  		if e.filterErr(err) != nil {
  			return nil, err
  		}
  
  		offset := e.insertColumns[i].Offset
  		row[offset] = casted
  		hasValue[offset] = true
  	}
  
  	return e.fillRow(row, hasValue)
  }
docs: // getRow gets the row which from `insert into select from` or `load data`.
  // The input values from these two statements are datums instead of
  // expressions which are used in `insert into set x=y`.