package org.raidenjpa.query.parser;
import static org.junit.Assert.*;
import org.junit.Test;
import org.raidenjpa.util.FixMe;
public class SelectParserTest {
@Test
public void testMoreThanOneEntity() {
String jpql = "SELECT a, b FROM A a, B b";
QueryParser queryParser = new QueryParser(jpql);
SelectClause select = queryParser.getSelect();
assertEquals(2, select.getElements().size());
SelectElement first = select.getElements().get(0);
assertEquals("a", first.getPath().get(0));
SelectElement second = select.getElements().get(1);
assertEquals("b", second.getPath().get(0));
}
@Test
public void testMoreThanOneAttribute() {
String jpql = "SELECT a.stringValue, a.intValue, b.value FROM A a, B b";
QueryParser queryParser = new QueryParser(jpql);
SelectClause select = queryParser.getSelect();
assertEquals(3, select.getElements().size());
SelectElement first = select.getElements().get(0);
assertEquals("a", first.getPath().get(0));
assertEquals("stringValue", first.getPath().get(1));
SelectElement second = select.getElements().get(1);
assertEquals("a", second.getPath().get(0));
assertEquals("intValue", second.getPath().get(1));
SelectElement third = select.getElements().get(2);
assertEquals("b", third.getPath().get(0));
assertEquals("value", third.getPath().get(1));
}
@FixMe("Implement last test")
@Test
public void testWithouSelectClause() {
String jpql = "FROM A a";
QueryParser queryParser = new QueryParser(jpql);
SelectClause select = queryParser.getSelect();
assertEquals(1, select.getElements().size());
assertEquals("a", select.getElements().get(0).getPath().get(0));
jpql = "FROM A a, B b";
}
@Test
public void testDistinct() {
String jpql = "SELECT distinct a.stringValue, a.intValue FROM A a";
QueryParser parser = new QueryParser(jpql);
SelectClause select = parser.getSelect();
assertTrue(select.isDistinct());
assertEquals("a", select.getElements().get(0).getPath().get(0));
assertEquals("stringValue", select.getElements().get(0).getPath().get(1));
assertEquals("a", select.getElements().get(1).getPath().get(0));
assertEquals("intValue", select.getElements().get(1).getPath().get(1));
}
@Test
public void testCount() {
String jpql = "SELECT count(*) FROM A a";
QueryParser parser = new QueryParser(jpql);
SelectClause select = parser.getSelect();
assertTrue(select.getElements().get(0).isCount());
}
@Test
public void testMax() {
String jpql = "SELECT max(a.intValue) FROM A a";
QueryParser parser = new QueryParser(jpql);
SelectClause select = parser.getSelect();
assertTrue(select.getElements().get(0).isMax());
assertEquals("a", select.getElements().get(0).getPath().get(0));
assertEquals("intValue", select.getElements().get(0).getPath().get(1));
}
}