package net.sourceforge.mayfly.evaluation.what; import net.sourceforge.mayfly.evaluation.Expression; import net.sourceforge.mayfly.evaluation.ResultRow; import net.sourceforge.mayfly.util.ImmutableList; import net.sourceforge.mayfly.util.L; import java.util.Iterator; public class What implements Iterable<WhatElement> { private final ImmutableList<WhatElement> elements; public What(WhatElement... elements) { this(ImmutableList.fromArray(elements)); } public What(ImmutableList elements) { this.elements = elements; } public Iterator<WhatElement> iterator() { return elements.iterator(); } public What with(WhatElement newElement) { return new What(elements.with(newElement)); } public Selected selected(ResultRow dummyRow) { L result = new L(); for (WhatElement element : elements) { result.addAll(element.selected(dummyRow)); } return new Selected(new ImmutableList(result)); } public Expression lookupAlias(String name) { for (WhatElement element : elements) { Expression result = element.lookupAlias(name); if (result != null) { return result; } } return null; } public Expression lookupName(String name) { for (WhatElement element : elements) { Expression result = element.lookupName(name); if (result != null) { return result; } } return null; } public int size() { return elements.size(); } public WhatElement element(int zeroBasedColumn) { return elements.get(zeroBasedColumn); } }