throw new IllegalArgumentException("Not enough arguments for substring function"); } else if (thirdObj == null) { return new QueryExpression(firstObj, QueryExpression.SUBSTRING, secondObj); } else { return new QueryExpression(firstObj, secondObj, thirdObj); throw new IllegalArgumentException("Too few arguments for indexof function"); return new QueryExpression(firstObj, QueryExpression.INDEX_OF, secondObj); } else if (type == -4) { return new QueryExpression(QueryExpression.LOWER, firstObj); } else if (type == -5) { return new QueryExpression(QueryExpression.UPPER, firstObj); } else if (type == -6) { return new QueryExpression(firstObj, QueryExpression.GREATEST, secondObj); } else if (type == -7) { return new QueryExpression(firstObj, QueryExpression.LEAST, secondObj); } else if (type == QueryFunction.COUNT) { return new QueryFunction();
if (qe.getOperation() == QueryExpression.SUBSTRING) { return "SUBSTR(" + nodeToString(q, qe.getArg1(), parameters, null) + ", " + nodeToString(q, qe.getArg2(), parameters, null) + (qe.getArg3() == null ? "" : ", " + nodeToString(q, qe.getArg3(), parameters, null)) + ")"; } else if (qe.getOperation() == QueryExpression.INDEX_OF) { return "INDEXOF(" + nodeToString(q, qe.getArg1(), parameters, null) + ", " + nodeToString(q, qe.getArg2(), parameters, null) + ")"; } else if (qe.getOperation() == QueryExpression.UPPER) { return "UPPER(" + nodeToString(q, qe.getArg1(), parameters, null) + ")"; } else if (qe.getOperation() == QueryExpression.LOWER) { return "LOWER(" + nodeToString(q, qe.getArg1(), parameters, null) + ")"; } else if (qe.getOperation() == QueryExpression.GREATEST) { return "GREATEST(" + nodeToString(q, qe.getArg1(), parameters, null) + "," + nodeToString(q, qe.getArg2(), parameters, null) + ")"; } else if (qe.getOperation() == QueryExpression.LEAST) { return "LEAST(" + nodeToString(q, qe.getArg1(), parameters, null) + "," + nodeToString(q, qe.getArg2(), parameters, null) + ")"; } else { String retval = nodeToString(q, qe.getArg1(), parameters, null); switch (qe.getOperation()) { case QueryExpression.ADD: retval += " + "; default: throw (new IllegalArgumentException("Invalid QueryExpression operation: " + qe.getOperation())); retval += nodeToString(q, qe.getArg2(), parameters, null);
/** * Descends into QueryExpression and QueryFunction objects to find * all instances of QueryField. Will return a single element * set for QueryField and an empty set for QueryValue. * * @param qe a QueryEvalubale to find QueryFields for * @return a set of QueryFields */ protected static Set<QueryField> getQueryFields(QueryEvaluable qe) { Set<QueryField> fields = new HashSet<QueryField>(); if (qe instanceof QueryField) { fields.add((QueryField) qe); } else if (qe instanceof QueryFunction) { fields.addAll(getQueryFields(((QueryFunction) qe).getParam())); } else if (qe instanceof QueryExpression) { fields.addAll(getQueryFields(((QueryExpression) qe).getArg1())); fields.addAll(getQueryFields(((QueryExpression) qe).getArg2())); fields.addAll(getQueryFields(((QueryExpression) qe).getArg3())); } return fields; }
public void testValidOp() { QueryValue arg1 = new QueryValue(new Integer(3)); QueryValue arg2 = new QueryValue(new Integer(4)); expression = new QueryExpression(arg1, QueryExpression.ADD, arg2); assertTrue(Number.class.isAssignableFrom(expression.getType())); } }
QueryExpression qe2 = (QueryExpression) qn2; Assert.assertEquals(msg + ": type of QueryExpressions are not the same", qe1.getType(), qe2.getType()); checkQueryNodes(msg + ": first QueryEvaluables are not equal", qe1.getArg1(), qe2.getArg1(), q1, q2); checkQueryNodes(msg + ": second QueryEvaluables are not equal", qe1.getArg2(), qe2.getArg2(), q1, q2); checkQueryNodes(msg + ": third QueryEvaluables are not equal", qe1.getArg3(), qe2.getArg3(), q1, q2);
} else { throw new ClassCastException("Invalid arguments (" + arg1.getType() + ", " + arg2.getType() + ") for specified operation (" + getOpName(op) + ")");
/** * Descends into QueryExpression and QueryFunction objects to find * all instances of QueryField. Will return a single element * set for QueryField and an empty set for QueryValue. * * @param qe a QueryEvalubale to find QueryFields for * @return a set of QueryFields */ protected static Set<QueryField> getQueryFields(QueryEvaluable qe) { Set<QueryField> fields = new HashSet<QueryField>(); if (qe instanceof QueryField) { fields.add((QueryField) qe); } else if (qe instanceof QueryFunction) { fields.addAll(getQueryFields(((QueryFunction) qe).getParam())); } else if (qe instanceof QueryExpression) { fields.addAll(getQueryFields(((QueryExpression) qe).getArg1())); fields.addAll(getQueryFields(((QueryExpression) qe).getArg2())); fields.addAll(getQueryFields(((QueryExpression) qe).getArg3())); } return fields; }
public void testNumericModulo() { QueryField field = new QueryField(new QueryClass(CEO.class), "age"); QueryValue two = new QueryValue(new Integer(2)); expression = new QueryExpression(field, QueryExpression.MODULO, two); assertTrue(Number.class.isAssignableFrom(expression.getType())); }
} else { throw new ClassCastException("Invalid arguments (" + arg1.getType() + ", " + arg2.getType() + ") for specified operation (" + getOpName(op) + ")");
throw new IllegalArgumentException("Not enough arguments for substring function"); } else if (thirdObj == null) { return new QueryExpression(firstObj, QueryExpression.SUBSTRING, secondObj); } else { return new QueryExpression(firstObj, secondObj, thirdObj); throw new IllegalArgumentException("Too few arguments for indexof function"); return new QueryExpression(firstObj, QueryExpression.INDEX_OF, secondObj); } else if (type == -4) { return new QueryExpression(QueryExpression.LOWER, firstObj); } else if (type == -5) { return new QueryExpression(QueryExpression.UPPER, firstObj); } else if (type == -6) { return new QueryExpression(firstObj, QueryExpression.GREATEST, secondObj); } else if (type == -7) { return new QueryExpression(firstObj, QueryExpression.LEAST, secondObj); } else if (type == QueryFunction.COUNT) { return new QueryFunction();
if (qe.getOperation() == QueryExpression.SUBSTRING) { return "SUBSTR(" + nodeToString(q, qe.getArg1(), parameters, null) + ", " + nodeToString(q, qe.getArg2(), parameters, null) + (qe.getArg3() == null ? "" : ", " + nodeToString(q, qe.getArg3(), parameters, null)) + ")"; } else if (qe.getOperation() == QueryExpression.INDEX_OF) { return "INDEXOF(" + nodeToString(q, qe.getArg1(), parameters, null) + ", " + nodeToString(q, qe.getArg2(), parameters, null) + ")"; } else if (qe.getOperation() == QueryExpression.UPPER) { return "UPPER(" + nodeToString(q, qe.getArg1(), parameters, null) + ")"; } else if (qe.getOperation() == QueryExpression.LOWER) { return "LOWER(" + nodeToString(q, qe.getArg1(), parameters, null) + ")"; } else if (qe.getOperation() == QueryExpression.GREATEST) { return "GREATEST(" + nodeToString(q, qe.getArg1(), parameters, null) + "," + nodeToString(q, qe.getArg2(), parameters, null) + ")"; } else if (qe.getOperation() == QueryExpression.LEAST) { return "LEAST(" + nodeToString(q, qe.getArg1(), parameters, null) + "," + nodeToString(q, qe.getArg2(), parameters, null) + ")"; } else { String retval = nodeToString(q, qe.getArg1(), parameters, null); switch (qe.getOperation()) { case QueryExpression.ADD: retval += " + "; default: throw (new IllegalArgumentException("Invalid QueryExpression operation: " + qe.getOperation())); retval += nodeToString(q, qe.getArg2(), parameters, null);
public void testInvalidOp() { QueryValue arg1 = new QueryValue(new Integer(3)); QueryValue arg2 = new QueryValue(new Integer(4)); try { expression = new QueryExpression(arg1, QueryExpression.SUBSTRING, arg2); fail("A ClassCastException should have been thrown"); } catch (ClassCastException e) { } }
if (nodeE.getOperation() == QueryExpression.SUBSTRING) { QueryEvaluable arg1 = nodeE.getArg1(); QueryEvaluable arg2 = nodeE.getArg2(); QueryEvaluable arg3 = nodeE.getArg3(); } else if (nodeE.getOperation() == QueryExpression.INDEX_OF) { QueryEvaluable arg1 = nodeE.getArg1(); QueryEvaluable arg2 = nodeE.getArg2(); queryEvaluableToString(buffer, arg2, q, state); buffer.append(")"); } else if (nodeE.getOperation() == QueryExpression.LOWER) { buffer.append("LOWER("); queryEvaluableToString(buffer, nodeE.getArg1(), q, state); buffer.append(")"); } else if (nodeE.getOperation() == QueryExpression.UPPER) { buffer.append("UPPER("); queryEvaluableToString(buffer, nodeE.getArg1(), q, state); buffer.append(")"); } else if (nodeE.getOperation() == QueryExpression.GREATEST) { buffer.append("GREATEST("); queryEvaluableToString(buffer, nodeE.getArg1(), q, state); buffer.append(","); queryEvaluableToString(buffer, nodeE.getArg2(), q, state); buffer.append(")"); } else if (nodeE.getOperation() == QueryExpression.LEAST) { buffer.append("LEAST("); queryEvaluableToString(buffer, nodeE.getArg1(), q, state); buffer.append(",");
public void testSelectQueryExpressionGreatestLeast() throws Exception { QueryValue v1 = new QueryValue(new Integer(5)); QueryValue v2 = new QueryValue(new Integer(7)); QueryExpression e1 = new QueryExpression(v1, QueryExpression.GREATEST, v2); QueryExpression e2 = new QueryExpression(v1, QueryExpression.LEAST, v2); StringBuffer buffer = new StringBuffer(); SqlGenerator.State state = new SqlGenerator.State(); SqlGenerator.queryEvaluableToString(buffer, e1, null, state); buffer.append(", "); SqlGenerator.queryEvaluableToString(buffer, e2, null, state); assertEquals("GREATEST(5,7), LEAST(5,7)", buffer.toString()); }
if (nodeE.getOperation() == QueryExpression.SUBSTRING) { QueryEvaluable arg1 = nodeE.getArg1(); QueryEvaluable arg2 = nodeE.getArg2(); QueryEvaluable arg3 = nodeE.getArg3(); } else if (nodeE.getOperation() == QueryExpression.INDEX_OF) { QueryEvaluable arg1 = nodeE.getArg1(); QueryEvaluable arg2 = nodeE.getArg2(); queryEvaluableToString(buffer, arg2, q, state); buffer.append(")"); } else if (nodeE.getOperation() == QueryExpression.LOWER) { buffer.append("LOWER("); queryEvaluableToString(buffer, nodeE.getArg1(), q, state); buffer.append(")"); } else if (nodeE.getOperation() == QueryExpression.UPPER) { buffer.append("UPPER("); queryEvaluableToString(buffer, nodeE.getArg1(), q, state); buffer.append(")"); } else if (nodeE.getOperation() == QueryExpression.GREATEST) { buffer.append("GREATEST("); queryEvaluableToString(buffer, nodeE.getArg1(), q, state); buffer.append(","); queryEvaluableToString(buffer, nodeE.getArg2(), q, state); buffer.append(")"); } else if (nodeE.getOperation() == QueryExpression.LEAST) { buffer.append("LEAST("); queryEvaluableToString(buffer, nodeE.getArg1(), q, state); buffer.append(",");
q.addFrom(qc); QueryField qf = new QueryField(qc, "identifier"); QueryExpression qe1 = new QueryExpression(qf, QueryExpression.INDEX_OF, new QueryValue("_")); QueryExpression qe2 = new QueryExpression(qe1, QueryExpression.SUBTRACT, new QueryValue(new Integer(1))); QueryExpression qe3 = new QueryExpression(qf, new QueryValue(new Integer(1)), qe2); QueryExpression qe4 = new QueryExpression(qe1, QueryExpression.ADD, new QueryValue(new Integer(1))); QueryExpression qe5 = new QueryExpression(qf, QueryExpression.SUBSTRING, qe4); QueryCast qca = new QueryCast(qe5, Integer.class); QueryFunction qfu = new QueryFunction(qca, QueryFunction.MAX);
if ((origE.getOperation() == QueryExpression.SUBSTRING) && (origE.getArg3() != null)) { return new QueryExpression((QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap), (QueryEvaluable) cloneThing(origE.getArg2(), fromElementMap, qopeMap), (QueryEvaluable) cloneThing(origE.getArg3(), fromElementMap, qopeMap)); } else if ((origE.getOperation() == QueryExpression.LOWER) || (origE.getOperation() == QueryExpression.UPPER)) { return new QueryExpression(origE.getOperation(), (QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap)); } else { return new QueryExpression((QueryEvaluable) cloneThing(origE.getArg1(), fromElementMap, qopeMap), origE.getOperation(), (QueryEvaluable) cloneThing(origE.getArg2(), fromElementMap, qopeMap));
public void testSelectQueryExpression() throws Exception { QueryValue v1 = new QueryValue(new Integer(5)); QueryValue v2 = new QueryValue(new Integer(7)); QueryExpression e1 = new QueryExpression(v1, QueryExpression.ADD, v2); QueryExpression e2 = new QueryExpression(v1, QueryExpression.SUBTRACT, v2); QueryExpression e3 = new QueryExpression(v1, QueryExpression.MULTIPLY, v2); QueryExpression e4 = new QueryExpression(v1, QueryExpression.DIVIDE, v2); StringBuffer buffer = new StringBuffer(); SqlGenerator.State state = new SqlGenerator.State(); SqlGenerator.queryEvaluableToString(buffer, e1, null, state); SqlGenerator.queryEvaluableToString(buffer, e2, null, state); SqlGenerator.queryEvaluableToString(buffer, e3, null, state); SqlGenerator.queryEvaluableToString(buffer, e4, null, state); assertEquals("(5 + 7)(5 - 7)(5 * 7)(5 / 7)", buffer.toString()); }