mirror of https://github.com/apache/openjpa.git
OPENJPA-1979: Regression for non-standard joins with constant column values - back ported to 2.1.x Pinaki Poddar's trunk changes.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/2.1.x@1484313 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f0fe24872b
commit
5b07fdfc52
|
@ -490,7 +490,7 @@ public class AnnotationPersistenceMappingParser
|
|||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit()));
|
||||
setTargetIdentifier(col, join.referencedColumnName());
|
||||
return col;
|
||||
}
|
||||
|
||||
|
@ -1713,14 +1713,33 @@ public class AnnotationPersistenceMappingParser
|
|||
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit()));
|
||||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit()));
|
||||
String refColumnName = join.referencedColumnName();
|
||||
if (!StringUtils.isEmpty(refColumnName)) {
|
||||
setTargetIdentifier(col, refColumnName);
|
||||
}
|
||||
col.setNotNull(!join.nullable());
|
||||
col.setFlag(Column.FLAG_UNINSERTABLE, !join.insertable());
|
||||
col.setFlag(Column.FLAG_UNUPDATABLE, !join.updatable());
|
||||
return col;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets reference column name of the given column taking into account
|
||||
* that the given reference name that begins with a single quote represents
|
||||
* special meaning of a constant join column and hence not to be delimited.
|
||||
* @param col
|
||||
* @param refColumnName
|
||||
* @see <a href="http://issues.apache.org/jira/browse/OPENJPA-1979">OPENJPA-1979</a>
|
||||
*/
|
||||
private static final char SINGLE_QUOTE = '\'';
|
||||
protected void setTargetIdentifier(Column col, String refColumnName) {
|
||||
if (refColumnName.charAt(0) == SINGLE_QUOTE) {
|
||||
col.setTargetIdentifier(DBIdentifier.newConstant(refColumnName));
|
||||
} else {
|
||||
col.setTargetIdentifier(DBIdentifier.newColumn(refColumnName, delimit()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse @KeyColumn(s).
|
||||
*/
|
||||
|
@ -1796,14 +1815,14 @@ public class AnnotationPersistenceMappingParser
|
|||
/**
|
||||
* Create a new schema column with information from the given annotation.
|
||||
*/
|
||||
private static Column newColumn(XJoinColumn join, boolean delimit) {
|
||||
private Column newColumn(XJoinColumn join, boolean delimit) {
|
||||
Column col = new Column();
|
||||
if (!StringUtils.isEmpty(join.name()))
|
||||
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit));
|
||||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit));
|
||||
setTargetIdentifier(col, join.referencedColumnName());
|
||||
if (!StringUtils.isEmpty(join.referencedAttributeName()))
|
||||
col.setTargetField(join.referencedAttributeName());
|
||||
col.setNotNull(!join.nullable());
|
||||
|
@ -1968,14 +1987,14 @@ public class AnnotationPersistenceMappingParser
|
|||
/**
|
||||
* Create a new schema column with information from the given annotation.
|
||||
*/
|
||||
private static Column newColumn(ElementJoinColumn join, boolean delimit) {
|
||||
private Column newColumn(ElementJoinColumn join, boolean delimit) {
|
||||
Column col = new Column();
|
||||
if (!StringUtils.isEmpty(join.name()))
|
||||
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit));
|
||||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit));
|
||||
setTargetIdentifier(col, join.referencedColumnName());
|
||||
if (!StringUtils.isEmpty(join.referencedAttributeName()))
|
||||
col.setTargetField(join.referencedAttributeName());
|
||||
col.setNotNull(!join.nullable());
|
||||
|
@ -2063,7 +2082,7 @@ public class AnnotationPersistenceMappingParser
|
|||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit()));
|
||||
setTargetIdentifier(col, join.referencedColumnName());
|
||||
col.setNotNull(!join.nullable());
|
||||
col.setFlag(Column.FLAG_UNINSERTABLE, !join.insertable());
|
||||
col.setFlag(Column.FLAG_UNUPDATABLE, !join.updatable ());
|
||||
|
|
|
@ -1004,8 +1004,9 @@ public class XMLPersistenceMappingParser
|
|||
if (val != null)
|
||||
col.setIdentifier(DBIdentifier.newColumn(val, delimit()));
|
||||
val = attrs.getValue("referenced-column-name");
|
||||
if (val != null)
|
||||
col.setTargetIdentifier(DBIdentifier.newColumn(val, delimit()));
|
||||
if (val != null) {
|
||||
setTargetIdentifier(col, val);
|
||||
}
|
||||
val = attrs.getValue("column-definition");
|
||||
if (val != null)
|
||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(val));
|
||||
|
@ -1041,6 +1042,23 @@ public class XMLPersistenceMappingParser
|
|||
return col;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets reference column name of the given column taking into account
|
||||
* that the given reference name that begins with a single quote represents
|
||||
* special meaning of a constant join column and hence not to be delimited.
|
||||
* @param col
|
||||
* @param refColumnName
|
||||
* @see <a href="http://issues.apache.org/jira/browse/OPENJPA-1979">OPENJPA-1979</a>
|
||||
*/
|
||||
private static final char SINGLE_QUOTE = '\'';
|
||||
protected void setTargetIdentifier(Column col, String refColumnName) {
|
||||
if (refColumnName.charAt(0) == SINGLE_QUOTE) {
|
||||
col.setTargetIdentifier(DBIdentifier.newConstant(refColumnName));
|
||||
} else {
|
||||
col.setTargetIdentifier(DBIdentifier.newColumn(refColumnName, delimit()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse collectionTable.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue