Search in sources :

Example 31 with Node

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

the class UpdateBuilderTest method testUpdateWithWhere.

@Test
public void testUpdateWithWhere() {
    UpdateBuilder builder = new UpdateBuilder("test");
    builder.set(column("col1").eq(value(1))).where(column("id").eq(value(123L)));
    Node node = builder.build();
    assertThat(node, instanceOf(UpdateNode.class));
    assertSQL("UPDATE test SET col1 = 1 WHERE id = 123", node);
}
Also used : UpdateNode(org.apache.cayenne.access.sqlbuilder.sqltree.UpdateNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) UpdateNode(org.apache.cayenne.access.sqlbuilder.sqltree.UpdateNode) Test(org.junit.Test)

Example 32 with Node

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

the class UpdateBuilderTest method testUpdateDbEntityCatalogAndSchema.

@Test
public void testUpdateDbEntityCatalogAndSchema() {
    DbEntity entity = new DbEntity("test");
    entity.setSchema("schema");
    entity.setCatalog("catalog");
    UpdateBuilder builder = new UpdateBuilder(entity);
    Node node = builder.build();
    assertThat(node, instanceOf(UpdateNode.class));
    assertSQL("UPDATE catalog.schema.test", node);
    assertQuotedSQL("UPDATE `catalog`.`schema`.`test`", node);
}
Also used : UpdateNode(org.apache.cayenne.access.sqlbuilder.sqltree.UpdateNode) DbEntity(org.apache.cayenne.map.DbEntity) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) UpdateNode(org.apache.cayenne.access.sqlbuilder.sqltree.UpdateNode) Test(org.junit.Test)

Example 33 with Node

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

the class OracleSQLTreeProcessor method onFunctionNode.

@Override
protected void onFunctionNode(Node parent, FunctionNode child, int index) {
    String functionName = child.getFunctionName();
    Node functionReplacement = null;
    switch(functionName) {
        case "LOCATE":
            functionReplacement = new FunctionNode("INSTR", child.getAlias(), true);
            for (int i = 0; i <= 1; i++) {
                functionReplacement.addChild(child.getChild(1 - i));
            }
            parent.replaceChild(index, functionReplacement);
            return;
        case "DAY_OF_YEAR":
        case "DAY_OF_WEEK":
        case "WEEK":
            functionReplacement = new FunctionNode("TO_CHAR", child.getAlias(), true);
            functionReplacement.addChild(child.getChild(0));
            if ("DAY_OF_YEAR".equals(functionName)) {
                functionName = "'DDD'";
            } else if ("DAY_OF_WEEK".equals(functionName)) {
                functionName = "'D'";
            } else {
                functionName = "'IW'";
            }
            functionReplacement.addChild(new TextNode(functionName));
            parent.replaceChild(index, functionReplacement);
            return;
        case "SUBSTRING":
            functionReplacement = new FunctionNode("SUBSTR", child.getAlias(), true);
            break;
        case "CONCAT":
            functionReplacement = new OpExpressionNode("||");
            break;
        case "CURRENT_TIMESTAMP":
        case "CURRENT_DATE":
            functionReplacement = new FunctionNode(functionName, child.getAlias(), false);
            break;
        case "CURRENT_TIME":
            functionReplacement = new FunctionNode("{fn CURTIME()}", child.getAlias(), false);
            break;
        case "YEAR":
        case "MONTH":
        case "DAY":
        case "DAY_OF_MONTH":
        case "HOUR":
        case "MINUTE":
        case "SECOND":
            functionReplacement = new FunctionNode("EXTRACT", child.getAlias(), true) {

                @Override
                public void appendChildrenSeparator(QuotingAppendable buffer, int childIdx) {
                    buffer.append(' ');
                }
            };
            if ("DAY_OF_MONTH".equals(functionName)) {
                functionName = "DAY";
            }
            functionReplacement.addChild(new TextNode(functionName + " FROM "));
            break;
    }
    if (functionReplacement != null) {
        replaceChild(parent, index, functionReplacement);
    }
}
Also used : OpExpressionNode(org.apache.cayenne.access.sqlbuilder.sqltree.OpExpressionNode) TextNode(org.apache.cayenne.access.sqlbuilder.sqltree.TextNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) FunctionNode(org.apache.cayenne.access.sqlbuilder.sqltree.FunctionNode) OpExpressionNode(org.apache.cayenne.access.sqlbuilder.sqltree.OpExpressionNode) LimitOffsetNode(org.apache.cayenne.access.sqlbuilder.sqltree.LimitOffsetNode) EmptyNode(org.apache.cayenne.access.sqlbuilder.sqltree.EmptyNode) InNode(org.apache.cayenne.access.sqlbuilder.sqltree.InNode) ValueNode(org.apache.cayenne.access.sqlbuilder.sqltree.ValueNode) ColumnNode(org.apache.cayenne.access.sqlbuilder.sqltree.ColumnNode) TrimmingColumnNode(org.apache.cayenne.access.sqlbuilder.sqltree.TrimmingColumnNode) FunctionNode(org.apache.cayenne.access.sqlbuilder.sqltree.FunctionNode) QuotingAppendable(org.apache.cayenne.access.sqlbuilder.QuotingAppendable) TextNode(org.apache.cayenne.access.sqlbuilder.sqltree.TextNode)

Example 34 with Node

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

the class OracleSQLTreeProcessor method onInNode.

@Override
protected void onInNode(Node parent, InNode child, int index) {
    boolean not = child.isNot();
    Node arg = child.getChild(0);
    Node childNode = child.getChild(1);
    if (childNode.getType() != NodeType.VALUE) {
        return;
    }
    ValueNode valueNode = (ValueNode) childNode;
    Object value = valueNode.getValue();
    if (!value.getClass().isArray()) {
        return;
    }
    List<Node> newChildren = new ArrayList<>();
    // need to slice for batches of 1000 values
    if (value instanceof Object[]) {
        for (Object[] slice : ArrayUtil.sliceArray((Object[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    } else if (value instanceof int[]) {
        for (int[] slice : ArrayUtil.sliceArray((int[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    } else if (value instanceof long[]) {
        for (long[] slice : ArrayUtil.sliceArray((long[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    } else if (value instanceof float[]) {
        for (float[] slice : ArrayUtil.sliceArray((float[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    } else if (value instanceof double[]) {
        for (double[] slice : ArrayUtil.sliceArray((double[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    } else if (value instanceof short[]) {
        for (short[] slice : ArrayUtil.sliceArray((short[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    } else if (value instanceof char[]) {
        for (char[] slice : ArrayUtil.sliceArray((char[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    } else if (value instanceof boolean[]) {
        for (boolean[] slice : ArrayUtil.sliceArray((boolean[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    } else if (value instanceof byte[]) {
        for (byte[] slice : ArrayUtil.sliceArray((byte[]) value, ORACLE_IN_BATCH_SIZE)) {
            newChildren.add(newSliceNode(child, arg, valueNode, slice));
        }
    }
    ExpressionNodeBuilder exp = exp(node(newChildren.get(0)));
    for (int i = 1; i < newChildren.size(); i++) {
        if (not) {
            exp = exp.and(node(newChildren.get(i)));
        } else {
            exp = exp.or(node(newChildren.get(i)));
        }
    }
    parent.replaceChild(index, exp.build());
}
Also used : ExpressionNodeBuilder(org.apache.cayenne.access.sqlbuilder.ExpressionNodeBuilder) TextNode(org.apache.cayenne.access.sqlbuilder.sqltree.TextNode) Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node) FunctionNode(org.apache.cayenne.access.sqlbuilder.sqltree.FunctionNode) OpExpressionNode(org.apache.cayenne.access.sqlbuilder.sqltree.OpExpressionNode) LimitOffsetNode(org.apache.cayenne.access.sqlbuilder.sqltree.LimitOffsetNode) EmptyNode(org.apache.cayenne.access.sqlbuilder.sqltree.EmptyNode) InNode(org.apache.cayenne.access.sqlbuilder.sqltree.InNode) ValueNode(org.apache.cayenne.access.sqlbuilder.sqltree.ValueNode) ColumnNode(org.apache.cayenne.access.sqlbuilder.sqltree.ColumnNode) TrimmingColumnNode(org.apache.cayenne.access.sqlbuilder.sqltree.TrimmingColumnNode) ArrayList(java.util.ArrayList) ValueNode(org.apache.cayenne.access.sqlbuilder.sqltree.ValueNode)

Example 35 with Node

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

the class BaseColumnExtractor method addDbAttribute.

protected void addDbAttribute(String prefix, String labelPrefix, DbAttribute dba) {
    String alias = context.getTableTree().aliasForPath(prefix);
    String dataRowKey = labelPrefix != null ? labelPrefix + '.' + dba.getName() : dba.getName();
    Node columnNode = table(alias).column(dba).build();
    context.addResultNode(columnNode, dataRowKey).setDbAttribute(dba);
}
Also used : Node(org.apache.cayenne.access.sqlbuilder.sqltree.Node)

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