package net.sourceforge.mayfly.evaluation.what;
import junit.framework.TestCase;
import net.sourceforge.mayfly.evaluation.expression.Concatenate;
import net.sourceforge.mayfly.evaluation.expression.Count;
import net.sourceforge.mayfly.evaluation.expression.CountAll;
import net.sourceforge.mayfly.evaluation.expression.Divide;
import net.sourceforge.mayfly.evaluation.expression.Maximum;
import net.sourceforge.mayfly.evaluation.expression.Minus;
import net.sourceforge.mayfly.evaluation.expression.Multiply;
import net.sourceforge.mayfly.evaluation.expression.Plus;
import net.sourceforge.mayfly.evaluation.expression.SingleColumn;
import net.sourceforge.mayfly.evaluation.expression.literal.IntegerLiteral;
import net.sourceforge.mayfly.evaluation.expression.literal.QuotedString;
import net.sourceforge.mayfly.evaluation.what.All;
import net.sourceforge.mayfly.evaluation.what.AllColumnsFromTable;
import net.sourceforge.mayfly.parser.Parser;
public class WhatElementTest extends TestCase {
public void testDisplayNameNonExpressions() {
assertEquals("*", new All().displayName());
assertEquals("foo.*", new AllColumnsFromTable("foo").displayName());
}
public void testDisplayNameBasicExpressions() throws Exception {
assertEquals("foo.x", new SingleColumn("foo", "x").displayName());
assertEquals("x", new SingleColumn("x").displayName());
assertEquals("3", new IntegerLiteral(3).displayName());
assertEquals("'don''t'", new QuotedString("'don''t'").displayName());
}
public void testDisplayNameAggregates() throws Exception {
assertEquals("COunt(*)", new CountAll("COunt").displayName());
assertEquals("COunt(x)", new Count(new SingleColumn("x"), "COunt", false).displayName());
assertEquals("COunt(distinct x)", new Count(new SingleColumn("x"), "COunt", true).displayName());
assertEquals("MAX(x)", new Maximum(new SingleColumn("x"), "MAX", false).displayName());
}
public void xtestOperatorsNoPrecedence() throws Exception {
assertEquals("x || y", new Concatenate(new SingleColumn("x"), new SingleColumn("y")).displayName());
assertEquals("x * y", new Multiply(new SingleColumn("x"), new SingleColumn("y")).displayName());
assertEquals("x / y", new Divide(new SingleColumn("x"), new SingleColumn("y")).displayName());
assertEquals("x + y", new Plus(new SingleColumn("x"), new SingleColumn("y")).displayName());
assertEquals("x - y", new Minus(new SingleColumn("x"), new SingleColumn("y")).displayName());
}
public void xtestPrecedence() throws Exception {
assertEquals(
"x + y * z",
new Plus(
new SingleColumn("x"),
new Multiply(new SingleColumn("y"), new SingleColumn("z"))
)
.displayName()
);
assertEquals(
"x * y * z",
new Multiply(
new SingleColumn("x"),
new Multiply(new SingleColumn("y"), new SingleColumn("z"))
)
.displayName()
);
assertEquals(
"(x + y) * z",
new Multiply(
new Plus(new SingleColumn("x"), new SingleColumn("y")),
new SingleColumn("z")
)
.displayName()
);
}
public void testPrecedence2() throws Exception {
String actual = new Parser("x + y + z * (w / 4) - y - x / (y * z)").parseWhatElement().displayName();
// assertEquals("x + y + z * (w / 4) - y - x / (y * z)", actual);
assertEquals("expression", actual);
}
}