code: func (ds *DataSource) tryToGetMemTask(prop *property.PhysicalProperty) (task task, err error) {
  	if !prop.IsEmpty() {
  		return nil, nil
  	}
  	if !infoschema.IsMemoryDB(ds.DBName.L) {
  		return nil, nil
  	}
  
  	memTable := PhysicalMemTable{
  		DBName:      ds.DBName,
  		Table:       ds.tableInfo,
  		Columns:     ds.Columns,
  		TableAsName: ds.TableAsName,
  	}.Init(ds.ctx, ds.stats)
  	memTable.SetSchema(ds.schema)
  
  	// Stop to push down these conditions.
  	var retPlan PhysicalPlan = memTable
  	if len(ds.pushedDownConds) > 0 {
  		sel := PhysicalSelection{
  			Conditions: ds.pushedDownConds,
  		}.Init(ds.ctx, ds.stats)
  		sel.SetChildren(memTable)
  		retPlan = sel
  	}
  	return &rootTask{p: retPlan}, nil
  }
docs: // tryToGetMemTask will check if this table is a mem table. If it is, it will produce a task.