mirror of https://github.com/apache/openjpa.git
OPENJPA-360 FOR UPDATE clause incorrectly generated
remove transient variable git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@575079 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
efc6e371b7
commit
5e590a951e
|
@ -313,12 +313,12 @@ public class DB2Dictionary
|
||||||
* updateClause and isolationLevel hints
|
* updateClause and isolationLevel hints
|
||||||
*/
|
*/
|
||||||
protected String getForUpdateClause(JDBCFetchConfiguration fetch,
|
protected String getForUpdateClause(JDBCFetchConfiguration fetch,
|
||||||
boolean isForUpdate) {
|
boolean isForUpdate, Select sel) {
|
||||||
int isolationLevel;
|
int isolationLevel;
|
||||||
// For db2UDBV81OrEarlier and db2ISeriesV5R3OrEarlier:
|
// For db2UDBV81OrEarlier and db2ISeriesV5R3OrEarlier:
|
||||||
// "optimize for" clause appears before "for update" clause.
|
// "optimize for" clause appears before "for update" clause.
|
||||||
StringBuffer forUpdateString = new StringBuffer(
|
StringBuffer forUpdateString = new StringBuffer(
|
||||||
getOptimizeClause(fetch));
|
getOptimizeClause(sel));
|
||||||
try {
|
try {
|
||||||
// Determine the isolationLevel; the fetch
|
// Determine the isolationLevel; the fetch
|
||||||
// configuration data overrides the persistence.xml value
|
// configuration data overrides the persistence.xml value
|
||||||
|
@ -464,7 +464,7 @@ public class DB2Dictionary
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getOptimizeClause(JDBCFetchConfiguration fetch) {
|
protected String getOptimizeClause(Select sel) {
|
||||||
if (sel != null && sel.getExpectedResultCount() > 0) {
|
if (sel != null && sel.getExpectedResultCount() > 0) {
|
||||||
StringBuffer buf = new StringBuffer();
|
StringBuffer buf = new StringBuffer();
|
||||||
buf.append(" ").append(optimizeClause).append(" ")
|
buf.append(" ").append(optimizeClause).append(" ")
|
||||||
|
|
|
@ -60,7 +60,6 @@ import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.HashMap;
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
@ -70,8 +69,6 @@ import org.apache.openjpa.jdbc.kernel.JDBCStore;
|
||||||
import org.apache.openjpa.jdbc.kernel.exps.ExpContext;
|
import org.apache.openjpa.jdbc.kernel.exps.ExpContext;
|
||||||
import org.apache.openjpa.jdbc.kernel.exps.ExpState;
|
import org.apache.openjpa.jdbc.kernel.exps.ExpState;
|
||||||
import org.apache.openjpa.jdbc.kernel.exps.FilterValue;
|
import org.apache.openjpa.jdbc.kernel.exps.FilterValue;
|
||||||
import org.apache.openjpa.jdbc.kernel.exps.Lit;
|
|
||||||
import org.apache.openjpa.jdbc.kernel.exps.Param;
|
|
||||||
import org.apache.openjpa.jdbc.kernel.exps.Val;
|
import org.apache.openjpa.jdbc.kernel.exps.Val;
|
||||||
import org.apache.openjpa.jdbc.meta.ClassMapping;
|
import org.apache.openjpa.jdbc.meta.ClassMapping;
|
||||||
import org.apache.openjpa.jdbc.meta.FieldMapping;
|
import org.apache.openjpa.jdbc.meta.FieldMapping;
|
||||||
|
@ -88,7 +85,6 @@ import org.apache.openjpa.jdbc.schema.Sequence;
|
||||||
import org.apache.openjpa.jdbc.schema.Table;
|
import org.apache.openjpa.jdbc.schema.Table;
|
||||||
import org.apache.openjpa.jdbc.schema.Unique;
|
import org.apache.openjpa.jdbc.schema.Unique;
|
||||||
import org.apache.openjpa.kernel.Filters;
|
import org.apache.openjpa.kernel.Filters;
|
||||||
import org.apache.openjpa.kernel.exps.Path;
|
|
||||||
import org.apache.openjpa.lib.conf.Configurable;
|
import org.apache.openjpa.lib.conf.Configurable;
|
||||||
import org.apache.openjpa.lib.conf.Configuration;
|
import org.apache.openjpa.lib.conf.Configuration;
|
||||||
import org.apache.openjpa.lib.jdbc.ConnectionDecorator;
|
import org.apache.openjpa.lib.jdbc.ConnectionDecorator;
|
||||||
|
@ -325,7 +321,6 @@ public class DBDictionary
|
||||||
private Method _setBytes = null;
|
private Method _setBytes = null;
|
||||||
private Method _setString = null;
|
private Method _setString = null;
|
||||||
private Method _setCharStream = null;
|
private Method _setCharStream = null;
|
||||||
protected transient Select sel = null;
|
|
||||||
|
|
||||||
public DBDictionary() {
|
public DBDictionary() {
|
||||||
fixedSizeTypeNameSet.addAll(Arrays.asList(new String[]{
|
fixedSizeTypeNameSet.addAll(Arrays.asList(new String[]{
|
||||||
|
@ -1989,7 +1984,6 @@ public class DBDictionary
|
||||||
*/
|
*/
|
||||||
public SQLBuffer toSelect(Select sel, boolean forUpdate,
|
public SQLBuffer toSelect(Select sel, boolean forUpdate,
|
||||||
JDBCFetchConfiguration fetch) {
|
JDBCFetchConfiguration fetch) {
|
||||||
this.sel = sel;
|
|
||||||
sel.addJoinClassConditions();
|
sel.addJoinClassConditions();
|
||||||
boolean update = forUpdate && sel.getFromSelect() == null;
|
boolean update = forUpdate && sel.getFromSelect() == null;
|
||||||
SQLBuffer select = getSelects(sel, false, update);
|
SQLBuffer select = getSelects(sel, false, update);
|
||||||
|
@ -2004,7 +1998,7 @@ public class DBDictionary
|
||||||
SQLBuffer where = getWhere(sel, update);
|
SQLBuffer where = getWhere(sel, update);
|
||||||
return toSelect(select, fetch, from, where, sel.getGrouping(),
|
return toSelect(select, fetch, from, where, sel.getGrouping(),
|
||||||
sel.getHaving(), ordering, sel.isDistinct(), forUpdate,
|
sel.getHaving(), ordering, sel.isDistinct(), forUpdate,
|
||||||
sel.getStartIndex(), sel.getEndIndex());
|
sel.getStartIndex(), sel.getEndIndex(), sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2192,7 +2186,20 @@ public class DBDictionary
|
||||||
boolean distinct, boolean forUpdate, long start, long end) {
|
boolean distinct, boolean forUpdate, long start, long end) {
|
||||||
return toOperation(getSelectOperation(fetch), selects, from, where,
|
return toOperation(getSelectOperation(fetch), selects, from, where,
|
||||||
group, having, order, distinct, start, end,
|
group, having, order, distinct, start, end,
|
||||||
getForUpdateClause(fetch, forUpdate));
|
getForUpdateClause(fetch, forUpdate, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combine the given components into a SELECT statement.
|
||||||
|
*/
|
||||||
|
public SQLBuffer toSelect(SQLBuffer selects, JDBCFetchConfiguration fetch,
|
||||||
|
SQLBuffer from, SQLBuffer where, SQLBuffer group,
|
||||||
|
SQLBuffer having, SQLBuffer order,
|
||||||
|
boolean distinct, boolean forUpdate, long start, long end
|
||||||
|
, Select sel) {
|
||||||
|
return toOperation(getSelectOperation(fetch), selects, from, where,
|
||||||
|
group, having, order, distinct, start, end,
|
||||||
|
getForUpdateClause(fetch, forUpdate, sel));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2200,7 +2207,7 @@ public class DBDictionary
|
||||||
* updateClause and isolationLevel hints
|
* updateClause and isolationLevel hints
|
||||||
*/
|
*/
|
||||||
protected String getForUpdateClause(JDBCFetchConfiguration fetch,
|
protected String getForUpdateClause(JDBCFetchConfiguration fetch,
|
||||||
boolean isForUpdate) {
|
boolean isForUpdate, Select sel) {
|
||||||
if (fetch != null && fetch.getIsolation() != -1) {
|
if (fetch != null && fetch.getIsolation() != -1) {
|
||||||
throw new InvalidStateException(_loc.get(
|
throw new InvalidStateException(_loc.get(
|
||||||
"isolation-level-config-not-supported", getClass().getName()));
|
"isolation-level-config-not-supported", getClass().getName()));
|
||||||
|
|
Loading…
Reference in New Issue