mirror of https://github.com/apache/openjpa.git
OPENJPA-662: Allow version field values be loaded in projection query
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@677704 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
948c38e332
commit
c7e78fc80d
|
@ -880,6 +880,11 @@ public class FieldMapping
|
||||||
public Object loadProjection(JDBCStore store, JDBCFetchConfiguration fetch,
|
public Object loadProjection(JDBCStore store, JDBCFetchConfiguration fetch,
|
||||||
Result res, Joins joins)
|
Result res, Joins joins)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
|
// OPENJPA-662: Version fields have NoneFieldStrategy -- hence they
|
||||||
|
// need special treatment
|
||||||
|
if (isVersion()) {
|
||||||
|
return getDefiningMapping().getVersion().load(null, store, res);
|
||||||
|
}
|
||||||
return assertStrategy().loadProjection(store, fetch, res, joins);
|
return assertStrategy().loadProjection(store, fetch, res, joins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,9 +338,9 @@ public class Version
|
||||||
return assertStrategy().select(sel, mapping);
|
return assertStrategy().select(sel, mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load(OpenJPAStateManager sm, JDBCStore store, Result res)
|
public Object load(OpenJPAStateManager sm, JDBCStore store, Result res)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
assertStrategy().load(sm, store, res);
|
return assertStrategy().load(sm, store, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void afterLoad(OpenJPAStateManager sm, JDBCStore store) {
|
public void afterLoad(OpenJPAStateManager sm, JDBCStore store) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ public interface VersionStrategy
|
||||||
/**
|
/**
|
||||||
* Load data.
|
* Load data.
|
||||||
*/
|
*/
|
||||||
public void load(OpenJPAStateManager sm, JDBCStore store, Result res)
|
public Object load(OpenJPAStateManager sm, JDBCStore store, Result res)
|
||||||
throws SQLException;
|
throws SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -53,8 +53,9 @@ public abstract class AbstractVersionStrategy
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load(OpenJPAStateManager sm, JDBCStore store, Result res)
|
public Object load(OpenJPAStateManager sm, JDBCStore store, Result res)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void afterLoad(OpenJPAStateManager sm, JDBCStore store) {
|
public void afterLoad(OpenJPAStateManager sm, JDBCStore store) {
|
||||||
|
|
|
@ -178,13 +178,13 @@ public abstract class ColumnVersionStrategy
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load(OpenJPAStateManager sm, JDBCStore store, Result res)
|
public Object load(OpenJPAStateManager sm, JDBCStore store, Result res)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
// typically if one version column is in the result, they all are, so
|
// typically if one version column is in the result, they all are, so
|
||||||
// optimize by checking for the first one before doing any real work
|
// optimize by checking for the first one before doing any real work
|
||||||
Column[] cols = vers.getColumns();
|
Column[] cols = vers.getColumns();
|
||||||
if (!res.contains(cols[0]))
|
if (!res.contains(cols[0]))
|
||||||
return;
|
return null;
|
||||||
|
|
||||||
Object version = null;
|
Object version = null;
|
||||||
if (cols.length > 0)
|
if (cols.length > 0)
|
||||||
|
@ -192,14 +192,18 @@ public abstract class ColumnVersionStrategy
|
||||||
Object cur;
|
Object cur;
|
||||||
for (int i = 0; i < cols.length; i++) {
|
for (int i = 0; i < cols.length; i++) {
|
||||||
if (i > 0 && !res.contains(cols[i]))
|
if (i > 0 && !res.contains(cols[i]))
|
||||||
return;
|
return null;
|
||||||
cur = res.getObject(cols[i], -1, null);
|
cur = res.getObject(cols[i], -1, null);
|
||||||
if (cols.length == 1)
|
if (cols.length == 1)
|
||||||
version = cur;
|
version = cur;
|
||||||
else
|
else
|
||||||
((Object[]) version)[i] = cur;
|
((Object[]) version)[i] = cur;
|
||||||
}
|
}
|
||||||
sm.setVersion(version);
|
// OPENJPA-662 Allow a null StateManager because this method may just be
|
||||||
|
// invoked to get the result of projection query
|
||||||
|
if (sm != null)
|
||||||
|
sm.setVersion(version);
|
||||||
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkVersion(OpenJPAStateManager sm, JDBCStore store,
|
public boolean checkVersion(OpenJPAStateManager sm, JDBCStore store,
|
||||||
|
|
Loading…
Reference in New Issue