Search in sources :

Example 6 with Node

use of org.apache.cayenne.access.sqlbuilder.sqltree.Node in project cayenne by apache.

the class DeleteBuilderTest method testDelete.

@Test
public void testDelete() {
    DeleteBuilder builder = new DeleteBuilder("test");
    Node node = builder.build();
    assertThat(node, instanceOf(DeleteNode.class));
    assertSQL("DELETE FROM test", node);
}
Also used : DeleteNode(org.apache.cayenne.access.sqlbuilder.sqltree.DeleteNode) DeleteNode(org.apache.cayenne.access.sqlbuilder.sqltree.DeleteNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) Test(org.junit.Test)

Example 7 with Node

use of org.apache.cayenne.access.sqlbuilder.sqltree.Node in project cayenne by apache.

the class SelectBuilderTest method testSelectFromWhere.

@Test
public void testSelectFromWhere() {
    SelectBuilder builder = new SelectBuilder(column("a")).from(table("b")).where(column("a").eq(value(123)));
    Node node = builder.build();
    assertThat(node, instanceOf(SelectNode.class));
    assertSQL("SELECT a FROM b WHERE a = 123", node);
}
Also used : SelectNode(org.apache.cayenne.access.sqlbuilder.sqltree.SelectNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) SelectNode(org.apache.cayenne.access.sqlbuilder.sqltree.SelectNode) Test(org.junit.Test)

Example 8 with Node

use of org.apache.cayenne.access.sqlbuilder.sqltree.Node in project cayenne by apache.

the class SelectBuilderTest method testComplexQuery.

@Test
public void testComplexQuery() {
    Node node = select(table("a").column("ARTIST_ID").as("a_id"), count(table("p").column("PAINTING_TITLE")).as("p_count")).distinct().from(table("ARTIST").as("a")).from(leftJoin(table("PAINTING").as("p")).on(table("a").column("ARTIST_ID").eq(table("p").column("ARTIST_ID")).and(table("p").column("ESTIMATED_PRICE").gt(value(10))))).where(table("a").column("ARTIST_NAME").eq(value("Picasso")).and(exists(select(all()).from(table("GALLERY").as("g")).where(table("g").column("GALLERY_ID").eq(table("p").column("GALLERY_ID"))))).and(value(1).eq(value(1))).or(value(false))).groupBy(table("a").column("ARTIST_ID")).having(not(count(table("p").column("PAINTING_TITLE")).gt(value(3)))).orderBy(column("p_count").desc(), column("a_id").asc()).build();
    assertThat(node, instanceOf(SelectNode.class));
    assertSQL("SELECT DISTINCT" + " a.ARTIST_ID a_id, COUNT( p.PAINTING_TITLE ) AS p_count" + " FROM ARTIST a" + " LEFT JOIN PAINTING p ON ( a.ARTIST_ID = p.ARTIST_ID ) AND ( p.ESTIMATED_PRICE > 10 )" + " WHERE ( ( ( a.ARTIST_NAME = 'Picasso' )" + " AND EXISTS (SELECT * FROM GALLERY g WHERE g.GALLERY_ID = p.GALLERY_ID) )" + " AND ( 1 = 1 ) ) OR false" + " GROUP BY a.ARTIST_ID" + " HAVING NOT ( COUNT( p.PAINTING_TITLE ) > 3 )" + " ORDER BY p_count DESC, a_id", node);
}
Also used : SelectNode(org.apache.cayenne.access.sqlbuilder.sqltree.SelectNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) SelectNode(org.apache.cayenne.access.sqlbuilder.sqltree.SelectNode) Test(org.junit.Test)

Example 9 with Node

use of org.apache.cayenne.access.sqlbuilder.sqltree.Node in project cayenne by apache.

the class SelectBuilderTest method testSelectColumns.

@Test
public void testSelectColumns() {
    SelectBuilder builder = new SelectBuilder(column("a"), table("c").column("b"));
    Node node = builder.build();
    assertThat(node, instanceOf(SelectNode.class));
    assertSQL("SELECT a, c.b", node);
    assertQuotedSQL("SELECT `a`, `c`.`b`", node);
}
Also used : SelectNode(org.apache.cayenne.access.sqlbuilder.sqltree.SelectNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) SelectNode(org.apache.cayenne.access.sqlbuilder.sqltree.SelectNode) Test(org.junit.Test)

Example 10 with Node

use of org.apache.cayenne.access.sqlbuilder.sqltree.Node in project cayenne by apache.

the class QualifierTranslator method createMultiAttributeMatch.

private Node createMultiAttributeMatch(Expression node, Expression parentNode, PathTranslationResult result) {
    DbRelationship relationship = result.getDbRelationship().orElseThrow(() -> new CayenneRuntimeException("Incorrect path '%s' translation, relationship expected", result.getFinalPath()));
    DbEntity targetEntity = relationship.getTargetEntity();
    if (result.getDbAttributes().size() != targetEntity.getPrimaryKeys().size()) {
        throw new CayenneRuntimeException("Unsupported or incorrect mapping for relationship '%s.%s': " + "target entity has different count of primary keys than count of joins.", relationship.getSourceEntityName(), relationship.getName());
    }
    Map<String, Object> valueSnapshot = getMultiAttributeValueSnapshot(node, parentNode);
    // convert snapshot if we have attributes from source, not target
    if (result.getLastAttribute().getEntity() == relationship.getSourceEntity()) {
        valueSnapshot = relationship.srcFkSnapshotWithTargetSnapshot(valueSnapshot);
    }
    // build compound PK/FK comparison node
    Node multiValueComparison = buildMultiValueComparison(result, valueSnapshot);
    // replace current node with multi value comparison
    Node currentNodeParent = currentNode.getParent();
    currentNodeParent.replaceChild(currentNodeParent.getChildrenCount() - 1, multiValueComparison);
    multiValueComparison.setParent(currentNodeParent);
    currentNode = currentNodeParent;
    // we should skip all related nodes as we build this part of the tree manually
    expressionsToSkip.add(node);
    expressionsToSkip.add(parentNode);
    for (int i = 0; i < parentNode.getOperandCount(); i++) {
        expressionsToSkip.add(parentNode.getOperand(i));
    }
    return null;
}
Also used : DbEntity(org.apache.cayenne.map.DbEntity) DbRelationship(org.apache.cayenne.map.DbRelationship) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) PatternMatchNode(org.apache.cayenne.exp.parser.PatternMatchNode) SimpleNode(org.apache.cayenne.exp.parser.SimpleNode) CayenneRuntimeException(org.apache.cayenne.CayenneRuntimeException) EmbeddableObject(org.apache.cayenne.EmbeddableObject) ASTFullObject(org.apache.cayenne.exp.parser.ASTFullObject)

Aggregations

Node (org.apache.cayenne.access.sqlbuilder.sqltree.Node)67 Test (org.junit.Test)32 ColumnNode (org.apache.cayenne.access.sqlbuilder.sqltree.ColumnNode)15 OpExpressionNode (org.apache.cayenne.access.sqlbuilder.sqltree.OpExpressionNode)15 FunctionNode (org.apache.cayenne.access.sqlbuilder.sqltree.FunctionNode)14 LimitOffsetNode (org.apache.cayenne.access.sqlbuilder.sqltree.LimitOffsetNode)13 TextNode (org.apache.cayenne.access.sqlbuilder.sqltree.TextNode)11 EmptyNode (org.apache.cayenne.access.sqlbuilder.sqltree.EmptyNode)9 ValueNode (org.apache.cayenne.access.sqlbuilder.sqltree.ValueNode)9 DbEntity (org.apache.cayenne.map.DbEntity)9 SelectNode (org.apache.cayenne.access.sqlbuilder.sqltree.SelectNode)8 InsertNode (org.apache.cayenne.access.sqlbuilder.sqltree.InsertNode)6 TrimmingColumnNode (org.apache.cayenne.access.sqlbuilder.sqltree.TrimmingColumnNode)6 QuotingAppendable (org.apache.cayenne.access.sqlbuilder.QuotingAppendable)5 UpdateNode (org.apache.cayenne.access.sqlbuilder.sqltree.UpdateNode)5 DeleteNode (org.apache.cayenne.access.sqlbuilder.sqltree.DeleteNode)4 InNode (org.apache.cayenne.access.sqlbuilder.sqltree.InNode)4 MysqlLimitOffsetNode (org.apache.cayenne.dba.mysql.sqltree.MysqlLimitOffsetNode)4 Expression (org.apache.cayenne.exp.Expression)4 SimpleNode (org.apache.cayenne.exp.parser.SimpleNode)4