code: func (s *propOuterJoinConstSolver) deriveConds(outerCol, innerCol *Column, schema *Schema, fCondsOffset int, visited []bool, filterConds bool) []bool {
  	var offset, condsLen int
  	var conds []Expression
  	if filterConds {
  		conds = s.filterConds
  		offset = fCondsOffset
  		condsLen = len(s.filterConds)
  	} else {
  		conds = s.joinConds
  		condsLen = fCondsOffset
  	}
  	for k := 0; k < condsLen; k++ {
  		if visited[k+offset] {
  			// condition has been used to retrieve equality relation or contains column beyond children schema.
  			continue
  		}
  		cond := conds[k]
  		if !ExprFromSchema(cond, schema) {
  			visited[k+offset] = true
  			continue
  		}
  		replaced, _, newExpr := tryToReplaceCond(s.ctx, outerCol, innerCol, cond)
  		if replaced {
  			s.joinConds = append(s.joinConds, newExpr)
  		}
  	}
  	return visited
  }
docs: // deriveConds given `outerCol = innerCol`, derive new expression for specified conditions.