package net.sourceforge.mayfly.evaluation.select; import net.sourceforge.mayfly.datastore.LongCell; import net.sourceforge.mayfly.evaluation.NoColumn; import net.sourceforge.mayfly.evaluation.ResultRow; import net.sourceforge.mayfly.parser.Location; import static net.sourceforge.mayfly.util.MayflyAssert.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import org.junit.Test; public class RowEvaluatorTest { @Test public void lookup() { Evaluator nested = Evaluator.NO_SUBSELECT_NEEDED; ResultRow correlatedRow = new ResultRow().withColumn("aaa", "a", new LongCell(7)); RowEvaluator evaluator = new RowEvaluator(correlatedRow, nested); ResultRow rowFromInner = new ResultRow().withColumn("bbb", "b", new LongCell(8)); assertLong(7, evaluator.lookup(rowFromInner, "aaa", null, "a", Location.UNKNOWN)); assertLong(7, evaluator.lookup(rowFromInner, null, null, "a", Location.UNKNOWN)); assertLong(8, evaluator.lookup(rowFromInner, "bbb", null, "b", Location.UNKNOWN)); assertLong(8, evaluator.lookup(rowFromInner, null, null, "b", Location.UNKNOWN)); checkLookupFails(rowFromInner, evaluator, null, "c", "c"); checkLookupFails(rowFromInner, evaluator, "ccc", "c", "ccc.c"); checkLookupFails(rowFromInner, evaluator, "aaa", "b", "aaa.b"); checkLookupFails(rowFromInner, evaluator, "bbb", "a", "bbb.a"); } private void checkLookupFails( ResultRow row, RowEvaluator evaluator, String table, String column, String expectedDisplayName) { try { evaluator.lookup(row, table, table, column, Location.UNKNOWN); fail(); } catch (NoColumn expected) { assertEquals(expectedDisplayName, expected.displayName()); } } @Test public void lookupName() { Evaluator nested = Evaluator.NO_SUBSELECT_NEEDED; ResultRow nonCorrelatedRow = new ResultRow().withColumn("bbb", "b", new LongCell(8)); ResultRow correlatedRow = new ResultRow().withColumn("aaa", "a", new LongCell(7)); RowEvaluator evaluator = new RowEvaluator(correlatedRow, nested); assertColumn("aaa", "a", evaluator.lookupName(nonCorrelatedRow, "a")); assertColumn("bbb", "b", evaluator.lookupName(nonCorrelatedRow, "b")); assertNull(evaluator.lookupName(nonCorrelatedRow, "c")); } }