/** * String concatenation operation. * * @param x * string expression * @param y * string expression * @return expression corresponding to concatenation */ public Expression<String> concat(Expression<String> x, Expression<String> y){ List list = new ArrayList(); list.add(x); list.add(y); org.eclipse.persistence.expressions.Expression xNode = ((InternalSelection)x).getCurrentNode(); org.eclipse.persistence.expressions.Expression yNode = ((InternalSelection)y).getCurrentNode(); if (xNode.isParameterExpression() && yNode.isParameterExpression()) { //some database require the type when concatting two parameters. ((org.eclipse.persistence.internal.expressions.ParameterExpression)xNode).setType(ClassConstants.STRING); } return new FunctionExpressionImpl(this.metamodel, ClassConstants.STRING, xNode.concat(yNode), list, CONCAT); }
/** * INTERNAL: * Print SQL using the operator. */ public void printSQL(ExpressionSQLPrinter printer) { // If all children are parameters, some databases don't allow binding. if (printer.getPlatform().isDynamicSQLRequiredForFunctions() && !this.children.isEmpty()) { boolean allParams = true; for (Iterator iterator = this.children.iterator(); iterator.hasNext(); ) { Expression child = (Expression)iterator.next(); if (!(child.isParameterExpression() || child.isConstantExpression())) { allParams = false; } } if (allParams) { printer.getCall().setUsesBinding(false); } } ExpressionOperator realOperator; realOperator = getPlatformOperator(printer.getPlatform()); realOperator.printCollection(this.children, printer); }
/** * INTERNAL: * Print SQL using the operator. */ public void printSQL(ExpressionSQLPrinter printer) { // If all children are parameters, some databases don't allow binding. if (printer.getPlatform().isDynamicSQLRequiredForFunctions() && !this.children.isEmpty()) { boolean allParams = true; for (Iterator iterator = this.children.iterator(); iterator.hasNext(); ) { Expression child = (Expression)iterator.next(); if (!(child.isParameterExpression() || child.isConstantExpression())) { allParams = false; } } if (allParams) { printer.getCall().setUsesBinding(false); } } ExpressionOperator realOperator; realOperator = getPlatformOperator(printer.getPlatform()); realOperator.printCollection(this.children, printer); }
/** * INTERNAL: * Print SQL using the operator. */ @Override public void printSQL(ExpressionSQLPrinter printer) { // If all children are parameters, some databases don't allow binding. if (printer.getPlatform().isDynamicSQLRequiredForFunctions() && !this.children.isEmpty()) { boolean allParams = true; for (Iterator<Expression> iterator = this.children.iterator(); iterator.hasNext(); ) { Expression child = iterator.next(); if (!(child.isParameterExpression() || child.isConstantExpression())) { allParams = false; } } if (allParams) { printer.getCall().setUsesBinding(false); } } ExpressionOperator realOperator; realOperator = getPlatformOperator(printer.getPlatform()); realOperator.printCollection(this.children, printer); }
/** * {@inheritDoc} */ @Override public void visit(CoalesceExpression expression) { List<Expression> expressions = new ArrayList<Expression>(); List<Class<?>> types = new LinkedList<Class<?>>(); // Create the Expression for each scalar expression for (org.eclipse.persistence.jpa.jpql.parser.Expression child : expression.getExpression().children()) { child.accept(this); expressions.add(queryExpression); types.add(type[0]); // Set the type on an untyped ParameterExpression, so that // valid types can be passed for null parameter values in JDBC if (queryExpression.isParameterExpression()) { ParameterExpression paramExpression = (ParameterExpression) queryExpression; if (paramExpression.getType() == null || paramExpression.getType().equals(Object.class)) { paramExpression.setType(type[0]); } } } // Create the COALESCE expression queryExpression = queryContext.getBaseExpression(); queryExpression = queryExpression.coalesce(expressions); // Set the expression type type[0] = queryContext.typeResolver().compareCollectionEquivalentTypes(types); }
/** * {@inheritDoc} */ @Override public void visit(CoalesceExpression expression) { List<Expression> expressions = new ArrayList<Expression>(); List<Class<?>> types = new LinkedList<Class<?>>(); // Create the Expression for each scalar expression for (org.eclipse.persistence.jpa.jpql.parser.Expression child : expression.getExpression().children()) { child.accept(this); expressions.add(queryExpression); types.add(type[0]); // Set the type on an untyped ParameterExpression, so that // valid types can be passed for null parameter values in JDBC if (queryExpression.isParameterExpression()) { ParameterExpression paramExpression = (ParameterExpression) queryExpression; if (paramExpression.getType() == null || paramExpression.getType().equals(Object.class)) { paramExpression.setType(type[0]); } } } // Create the COALESCE expression queryExpression = queryContext.getBaseExpression(); queryExpression = queryExpression.coalesce(expressions); // Set the expression type type[0] = queryContext.typeResolver().compareCollectionEquivalentTypes(types); }
public void iterate(Expression each) { if(each.isTableExpression()) { ((Collection)this.getResult()).add(((TableExpression)each).getTable()); } else if(each.isDataExpression()) { DatabaseField field = ((DataExpression)each).getField(); if(field != null && field.hasTableName()) { ((Collection)this.getResult()).add(field.getTable()); } } else if(each.isParameterExpression()) { DatabaseField field = ((ParameterExpression)each).getField(); if(field != null && field.hasTableName()) { ((Collection)this.getResult()).add(field.getTable()); } } } };
public void iterate(Expression each) { if(each.isTableExpression()) { ((Collection)this.getResult()).add(((TableExpression)each).getTable()); } else if(each.isDataExpression()) { DatabaseField field = ((DataExpression)each).getField(); if(field != null && field.hasTableName()) { ((Collection)this.getResult()).add(field.getTable()); } } else if(each.isParameterExpression()) { DatabaseField field = ((ParameterExpression)each).getField(); if(field != null && field.hasTableName()) { ((Collection)this.getResult()).add(field.getTable()); } } } };
public void iterate(Expression each) { if(each.isTableExpression()) { ((Collection)this.getResult()).add(((TableExpression)each).getTable()); } else if(each.isDataExpression()) { DatabaseField field = ((DataExpression)each).getField(); if(field != null && field.hasTableName()) { ((Collection)this.getResult()).add(field.getTable()); } } else if(each.isParameterExpression()) { DatabaseField field = ((ParameterExpression)each).getField(); if(field != null && field.hasTableName()) { ((Collection)this.getResult()).add(field.getTable()); } } } };
/** * INTERNAL: * Print SQL */ public void printSQL(ExpressionSQLPrinter printer) { // If both sides are parameters, some databases don't allow binding. if (printer.getPlatform().isDynamicSQLRequiredForFunctions() && ((this.firstChild.isParameterExpression() || this.firstChild.isConstantExpression()) && (this.secondChild.isParameterExpression() || this.secondChild.isConstantExpression()))) { printer.getCall().setUsesBinding(false); } if (isEqualNull(printer)) { this.firstChild.isNull().printSQL(printer); } else if (isNotEqualNull(printer)) { this.firstChild.notNull().printSQL(printer); } else { super.printSQL(printer); } }
/** * INTERNAL: * Print SQL */ public void printSQL(ExpressionSQLPrinter printer) { // If both sides are parameters, some databases don't allow binding. if (printer.getPlatform().isDynamicSQLRequiredForFunctions() && ((this.firstChild.isParameterExpression() || this.firstChild.isConstantExpression()) && (this.secondChild.isParameterExpression() || this.secondChild.isConstantExpression()))) { printer.getCall().setUsesBinding(false); } if (isEqualNull(printer)) { this.firstChild.isNull().printSQL(printer); } else if (isNotEqualNull(printer)) { this.firstChild.notNull().printSQL(printer); } else { super.printSQL(printer); } }
/** * INTERNAL: * Print SQL */ public void printSQL(ExpressionSQLPrinter printer) { // If both sides are parameters, some databases don't allow binding. if (printer.getPlatform().isDynamicSQLRequiredForFunctions() && ((this.firstChild.isParameterExpression() || this.firstChild.isConstantExpression()) && (this.secondChild.isParameterExpression() || this.secondChild.isConstantExpression()))) { printer.getCall().setUsesBinding(false); } if (isEqualNull(printer)) { this.firstChild.isNull().printSQL(printer); } else if (isNotEqualNull(printer)) { this.firstChild.notNull().printSQL(printer); } else { super.printSQL(printer); } }
/** * Check if the expression is an equal null expression, these must be handle in a special way in SQL. */ public boolean isEqualNull(ExpressionSQLPrinter printer) { if (isObjectComparison()) { return false; } else if (this.operator.getSelector() != ExpressionOperator.Equal) { return false; } else if (this.secondChild.isConstantExpression() && (((ConstantExpression)this.secondChild).getValue() == null)) { return true; } else if (this.secondChild.isParameterExpression() && (printer.getTranslationRow() != null) && (((ParameterExpression)this.secondChild).getValue(printer.getTranslationRow(), printer.getSession()) == null)) { return true; } else { return false; } }
/** * Check if the expression is an equal null expression, these must be handle in a special way in SQL. */ public boolean isNotEqualNull(ExpressionSQLPrinter printer) { if (isObjectComparison()) { return false; } else if (this.operator.getSelector() != ExpressionOperator.NotEqual) { return false; } else if (this.secondChild.isConstantExpression() && (((ConstantExpression)this.secondChild).getValue() == null)) { return true; } else if (this.secondChild.isParameterExpression() && (printer.getTranslationRow() != null) && (((ParameterExpression)this.secondChild).getValue(printer.getTranslationRow(), printer.getSession()) == null)) { return true; } else { return false; } }
/** * Check if the expression is an equal null expression, these must be handle in a special way in SQL. */ public boolean isNotEqualNull(ExpressionSQLPrinter printer) { if (isObjectComparison(printer.getSession())) { return false; } else if (this.operator.getSelector() != ExpressionOperator.NotEqual) { return false; } else if (this.secondChild.isConstantExpression() && (((ConstantExpression)this.secondChild).getValue() == null)) { return true; } else if (this.secondChild.isParameterExpression() && (printer.getTranslationRow() != null) && (((ParameterExpression)this.secondChild).getValue(printer.getTranslationRow(), printer.getSession()) == null)) { return true; } else { return false; } }
/** * Check if the expression is an equal null expression, these must be handle in a special way in SQL. */ public boolean isEqualNull(ExpressionSQLPrinter printer) { if (isObjectComparison(printer.getSession())) { return false; } else if (this.operator.getSelector() != ExpressionOperator.Equal) { return false; } else if (this.secondChild.isConstantExpression() && (((ConstantExpression)this.secondChild).getValue() == null)) { return true; } else if (this.secondChild.isParameterExpression() && (printer.getTranslationRow() != null) && (((ParameterExpression)this.secondChild).getValue(printer.getTranslationRow(), printer.getSession()) == null)) { return true; } else { return false; } }
/** * Check if the expression is an equal null expression, these must be handle in a special way in SQL. */ public boolean isEqualNull(ExpressionSQLPrinter printer) { if (isObjectComparison(printer.getSession())) { return false; } else if (this.operator.getSelector() != ExpressionOperator.Equal) { return false; } else if (this.secondChild.isConstantExpression() && (((ConstantExpression)this.secondChild).getValue() == null)) { return true; } else if (this.secondChild.isParameterExpression() && (printer.getTranslationRow() != null) && (((ParameterExpression)this.secondChild).getValue(printer.getTranslationRow(), printer.getSession()) == null)) { return true; } else { return false; } }
/** * Check if the expression is an equal null expression, these must be handle in a special way in SQL. */ public boolean isNotEqualNull(ExpressionSQLPrinter printer) { if (isObjectComparison(printer.getSession())) { return false; } else if (this.operator.getSelector() != ExpressionOperator.NotEqual) { return false; } else if (this.secondChild.isConstantExpression() && (((ConstantExpression)this.secondChild).getValue() == null)) { return true; } else if (this.secondChild.isParameterExpression() && (printer.getTranslationRow() != null) && (((ParameterExpression)this.secondChild).getValue(printer.getTranslationRow(), printer.getSession()) == null)) { return true; } else { return false; } }
/** * INTERNAL: * This method will walk the given expression and mark any parameter * expressions as property expressions. This is done when additional * criteria has been specified and parameter values must be resolved * through session properties. * * @see #postInitialize */ protected void updatePropertyParameterExpression(Expression exp) { if (exp.isCompoundExpression()) { updatePropertyParameterExpression(((CompoundExpression) exp).getFirstChild()); updatePropertyParameterExpression(((CompoundExpression) exp).getSecondChild()); } else if (exp.isFunctionExpression()) { for (Expression e : ((FunctionExpression) exp).getChildren()) { updatePropertyParameterExpression(e); } } else if (exp.isSubSelectExpression()) { ReportQuery subSelectQuery = ((SubSelectExpression) exp).getSubQuery(); for (ReportItem item : subSelectQuery.getItems()) { updatePropertyParameterExpression(item.getAttributeExpression()); } } if (exp.isParameterExpression()) { ((ParameterExpression) exp).setIsProperty(true); } }
/** * INTERNAL: * This method will walk the given expression and mark any parameter * expressions as property expressions. This is done when additional * criteria has been specified and parameter values must be resolved * through session properties. * * @see #postInitialize */ protected void updatePropertyParameterExpression(Expression exp) { if (exp.isCompoundExpression()) { updatePropertyParameterExpression(((CompoundExpression) exp).getFirstChild()); updatePropertyParameterExpression(((CompoundExpression) exp).getSecondChild()); } else if (exp.isFunctionExpression()) { for (Expression e : (Vector<Expression>) ((FunctionExpression) exp).getChildren()) { updatePropertyParameterExpression(e); } } else if (exp.isSubSelectExpression()) { ReportQuery subSelectQuery = ((SubSelectExpression) exp).getSubQuery(); for (ReportItem item : subSelectQuery.getItems()) { updatePropertyParameterExpression(item.getAttributeExpression()); } } if (exp.isParameterExpression()) { ((ParameterExpression) exp).setIsProperty(true); } }