OPENJPA-607 Extraneous "( )" on DISTINCT, ALL, ANY results in SQL syntax errors on some database systems

git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@659027 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Catalina Wei 2008-05-22 07:30:25 +00:00
parent 11f4d0d7ad
commit 47f681a7b5
4 changed files with 12 additions and 19 deletions

View File

@ -27,7 +27,7 @@ class All
extends UnaryOp {
public All(Val val) {
super(val);
super(val, true);
}
protected String getOperator() {

View File

@ -27,7 +27,7 @@ class Any
extends UnaryOp {
public Any(Val val) {
super(val);
super(val, true);
}
protected String getOperator() {

View File

@ -30,7 +30,7 @@ class Distinct
extends UnaryOp {
public Distinct(Val val) {
super(val);
super(val, true);
}
public ExpState initialize(Select sel, ExpContext ctx, int flags) {
@ -41,18 +41,4 @@ class Distinct
protected String getOperator() {
return "DISTINCT";
}
public void appendTo(Select sel, ExpContext ctx, ExpState state,
SQLBuffer sql, int index) {
if (sel.getConfiguration().getDBDictionaryInstance().platform.indexOf(
"Informix") > -1) {
sql.append(getOperator());
sql.append(" ");
getValue().appendTo(sel, ctx, state, sql, 0);
sql.addCastForParam(getOperator(), getValue());
}
else
super.appendTo(sel, ctx, state, sql, index);
}
}

View File

@ -39,6 +39,7 @@ abstract class UnaryOp
private final Val _val;
private ClassMetaData _meta = null;
private Class _cast = null;
private boolean _noParen = false;
/**
* Constructor. Provide the value to operate on.
@ -47,6 +48,11 @@ abstract class UnaryOp
_val = val;
}
public UnaryOp(Val val, boolean noParen) {
_val = val;
_noParen = noParen;
}
protected Val getValue() {
return _val;
}
@ -123,9 +129,10 @@ abstract class UnaryOp
public void appendTo(Select sel, ExpContext ctx, ExpState state,
SQLBuffer sql, int index) {
sql.append(getOperator());
sql.append("(");
sql.append(_noParen ? " " : "(");
_val.appendTo(sel, ctx, state, sql, 0);
sql.addCastForParam(getOperator(), _val);
if (!_noParen)
sql.append(")");
}