package net.sourceforge.mayfly.evaluation.expression;
import junit.framework.TestCase;
import net.sourceforge.mayfly.Options;
import net.sourceforge.mayfly.datastore.LongCell;
import net.sourceforge.mayfly.evaluation.Expression;
import net.sourceforge.mayfly.evaluation.NoColumn;
import net.sourceforge.mayfly.evaluation.ResultRow;
import net.sourceforge.mayfly.evaluation.expression.literal.IntegerLiteral;
import net.sourceforge.mayfly.evaluation.select.AliasEvaluator;
import net.sourceforge.mayfly.evaluation.what.AliasedExpression;
import net.sourceforge.mayfly.evaluation.what.What;
import net.sourceforge.mayfly.parser.Location;
import net.sourceforge.mayfly.parser.Parser;
import net.sourceforge.mayfly.util.MayflyAssert;
public class SingleColumnTest extends TestCase {
public void testRowTransform() throws Exception {
ResultRow row = new ResultRow()
.withColumn("t", "colA", "1")
.withColumn("t", "colB", "2")
;
MayflyAssert.assertString("1", new SingleColumn("colA").evaluate(row));
MayflyAssert.assertString("2", new SingleColumn("colB").evaluate(row));
}
public void testSameColumn() throws Exception {
Expression one = (Expression) new Parser("foo.x").parseWhatElement();
Expression two = (Expression) new Parser("Foo . X").parseWhatElement();
assertTrue(one.sameExpression(two));
assertTrue(two.sameExpression(one));
assertFalse(new SingleColumn("x").sameExpression(one));
assertFalse(new SingleColumn("x").sameExpression(new IntegerLiteral(5)));
assertFalse(one.sameExpression(new SingleColumn("foo", "y")));
}
public void testPossiblyNullEquals() throws Exception {
SingleColumn column = new SingleColumn("irrelevant");
assertTrue(column.possiblyNullTablesEqual("x", "X"));
assertFalse(column.possiblyNullTablesEqual("x", "xy"));
assertFalse(column.possiblyNullTablesEqual("x", null));
assertFalse(column.possiblyNullTablesEqual(null, "X"));
assertTrue(column.possiblyNullTablesEqual(null, null));
}
public void testResolve() throws Exception {
ResultRow row = new ResultRow().withColumn("foo", "x", new LongCell(7));
SingleColumn unresolved = new SingleColumn(
"x", new Location(5, 20, 7, 24), new Options());
SingleColumn resolved = (SingleColumn) unresolved.resolve(row);
assertEquals(null, resolved.originalTableOrAlias);
assertEquals("x", resolved.displayName());
assertEquals("foo", resolved.tableOrAlias());
assertEquals("x", resolved.columnName());
assertEquals(20, resolved.location.startColumn);
}
public void testEvaluatePassesOriginalTableToException() throws Exception {
SingleColumn unresolved = (SingleColumn)
new Parser("x").parseExpression().asNonBoolean();
SingleColumn resolved = (SingleColumn) unresolved.resolve(
new ResultRow().withColumn("foo", "x", new LongCell(7)));
try {
resolved.evaluate(new ResultRow());
fail();
}
catch (NoColumn expected) {
assertEquals("no column x", expected.getMessage());
}
}
public void testResolveWithColumnAlias() throws Exception {
ResultRow row = new ResultRow().withColumn("foo", "x", new LongCell(7));
SingleColumn unresolved = new SingleColumn(
"adjusted", new Location(5, 20, 7, 24), new Options());
unresolved.resolve(
row,
new AliasEvaluator(new What(
new AliasedExpression("adjusted",
new Plus(new SingleColumn("x"), new IntegerLiteral(5))
)
))
);
}
public void testCaseSensitiveSameExression() throws Exception {
SingleColumn secondColumn = new SingleColumn("fOO", "x");
assertTrue(
new SingleColumn("foo", "x", new Options())
.sameExpression(secondColumn));
assertFalse(
new SingleColumn("foo", "x", new Options(true))
.sameExpression(secondColumn));
}
}