Search in sources :

Example 36 with Node

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

the class BaseBatchTranslator method doTranslate.

/**
 * This method applies {@link org.apache.cayenne.access.translator.select.BaseSQLTreeProcessor} to the
 * provided SQL tree node and generates SQL string from it.
 *
 * @param nodeBuilder SQL tree node builder
 * @return SQL string
 */
protected String doTranslate(NodeBuilder nodeBuilder) {
    Node node = nodeBuilder.build();
    // convert to database flavour
    node = context.getAdapter().getSqlTreeProcessor().process(node);
    // generate SQL
    SQLGenerationVisitor visitor = new SQLGenerationVisitor(new DefaultQuotingAppendable(context));
    node.visit(visitor);
    bindings = context.getBindings().toArray(new DbAttributeBinding[0]);
    return visitor.getSQLString();
}
Also used : Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) DbAttributeBinding(org.apache.cayenne.access.translator.DbAttributeBinding) SQLGenerationVisitor(org.apache.cayenne.access.sqlbuilder.SQLGenerationVisitor) DefaultQuotingAppendable(org.apache.cayenne.access.translator.select.DefaultQuotingAppendable)

Example 37 with Node

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

the class ExpressionNodeBuilder method not.

public ExpressionNodeBuilder not() {
    return new ExpressionNodeBuilder(() -> {
        Node and = new NotNode();
        and.addChild(left.build());
        return and;
    });
}
Also used : NotNode(org.apache.cayenne.access.sqlbuilder.sqltree.NotNode) EqualNode(org.apache.cayenne.access.sqlbuilder.sqltree.EqualNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) OpExpressionNode(org.apache.cayenne.access.sqlbuilder.sqltree.OpExpressionNode) NotNode(org.apache.cayenne.access.sqlbuilder.sqltree.NotNode)

Example 38 with Node

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

the class OrderingNodeBuilder method build.

@Override
public Node build() {
    Node node = new EmptyNode();
    node.addChild(column.build());
    node.addChild(new TextNode(direction));
    return node;
}
Also used : EmptyNode(org.apache.cayenne.access.sqlbuilder.sqltree.EmptyNode) TextNode(org.apache.cayenne.access.sqlbuilder.sqltree.TextNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) EmptyNode(org.apache.cayenne.access.sqlbuilder.sqltree.EmptyNode) TextNode(org.apache.cayenne.access.sqlbuilder.sqltree.TextNode)

Example 39 with Node

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

the class QualifierTranslator method objectNode.

@Override
public void objectNode(Object leaf, Expression parentNode) {
    if (expressionsToSkip.contains(parentNode)) {
        return;
    }
    if (parentNode.getType() == OBJ_PATH || parentNode.getType() == DB_PATH || parentNode.getType() == DBID_PATH) {
        return;
    }
    ValueNodeBuilder valueNodeBuilder = value(leaf).attribute(findDbAttribute(parentNode));
    if (parentNode.getType() == Expression.LIST) {
        valueNodeBuilder.array(true);
    }
    Node nextNode = valueNodeBuilder.build();
    currentNode.addChild(nextNode);
    nextNode.setParent(currentNode);
}
Also used : Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) PatternMatchNode(org.apache.cayenne.exp.parser.PatternMatchNode) SimpleNode(org.apache.cayenne.exp.parser.SimpleNode) ValueNodeBuilder(org.apache.cayenne.access.sqlbuilder.ValueNodeBuilder)

Example 40 with Node

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

the class SQLGenerationStage method perform.

@Override
public void perform(TranslatorContext context) {
    if (context.isSkipSQLGeneration()) {
        return;
    }
    // Build final SQL tree
    Node node = context.getSelectBuilder().build();
    // convert to database flavour
    node = context.getAdapter().getSqlTreeProcessor().process(node);
    // generate SQL
    SQLGenerationVisitor visitor = new SQLGenerationVisitor(new DefaultQuotingAppendable(context));
    node.visit(visitor);
    context.setFinalSQL(visitor.getSQLString());
}
Also used : Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) SQLGenerationVisitor(org.apache.cayenne.access.sqlbuilder.SQLGenerationVisitor)

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