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()))
|
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit()));
|
setTargetIdentifier(col, join.referencedColumnName());
|
||||||
return col;
|
return col;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1713,13 +1713,32 @@ public class AnnotationPersistenceMappingParser
|
||||||
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit()));
|
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit()));
|
||||||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
String refColumnName = join.referencedColumnName();
|
||||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit()));
|
if (!StringUtils.isEmpty(refColumnName)) {
|
||||||
|
setTargetIdentifier(col, refColumnName);
|
||||||
|
}
|
||||||
col.setNotNull(!join.nullable());
|
col.setNotNull(!join.nullable());
|
||||||
col.setFlag(Column.FLAG_UNINSERTABLE, !join.insertable());
|
col.setFlag(Column.FLAG_UNINSERTABLE, !join.insertable());
|
||||||
col.setFlag(Column.FLAG_UNUPDATABLE, !join.updatable());
|
col.setFlag(Column.FLAG_UNUPDATABLE, !join.updatable());
|
||||||
return col;
|
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).
|
* Parse @KeyColumn(s).
|
||||||
|
@ -1796,14 +1815,14 @@ public class AnnotationPersistenceMappingParser
|
||||||
/**
|
/**
|
||||||
* Create a new schema column with information from the given annotation.
|
* 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();
|
Column col = new Column();
|
||||||
if (!StringUtils.isEmpty(join.name()))
|
if (!StringUtils.isEmpty(join.name()))
|
||||||
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit));
|
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit));
|
||||||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit));
|
setTargetIdentifier(col, join.referencedColumnName());
|
||||||
if (!StringUtils.isEmpty(join.referencedAttributeName()))
|
if (!StringUtils.isEmpty(join.referencedAttributeName()))
|
||||||
col.setTargetField(join.referencedAttributeName());
|
col.setTargetField(join.referencedAttributeName());
|
||||||
col.setNotNull(!join.nullable());
|
col.setNotNull(!join.nullable());
|
||||||
|
@ -1968,14 +1987,14 @@ public class AnnotationPersistenceMappingParser
|
||||||
/**
|
/**
|
||||||
* Create a new schema column with information from the given annotation.
|
* 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();
|
Column col = new Column();
|
||||||
if (!StringUtils.isEmpty(join.name()))
|
if (!StringUtils.isEmpty(join.name()))
|
||||||
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit));
|
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit));
|
||||||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit));
|
setTargetIdentifier(col, join.referencedColumnName());
|
||||||
if (!StringUtils.isEmpty(join.referencedAttributeName()))
|
if (!StringUtils.isEmpty(join.referencedAttributeName()))
|
||||||
col.setTargetField(join.referencedAttributeName());
|
col.setTargetField(join.referencedAttributeName());
|
||||||
col.setNotNull(!join.nullable());
|
col.setNotNull(!join.nullable());
|
||||||
|
@ -2063,7 +2082,7 @@ public class AnnotationPersistenceMappingParser
|
||||||
if (!StringUtils.isEmpty(join.columnDefinition()))
|
if (!StringUtils.isEmpty(join.columnDefinition()))
|
||||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
|
||||||
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
if (!StringUtils.isEmpty(join.referencedColumnName()))
|
||||||
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), delimit()));
|
setTargetIdentifier(col, join.referencedColumnName());
|
||||||
col.setNotNull(!join.nullable());
|
col.setNotNull(!join.nullable());
|
||||||
col.setFlag(Column.FLAG_UNINSERTABLE, !join.insertable());
|
col.setFlag(Column.FLAG_UNINSERTABLE, !join.insertable());
|
||||||
col.setFlag(Column.FLAG_UNUPDATABLE, !join.updatable ());
|
col.setFlag(Column.FLAG_UNUPDATABLE, !join.updatable ());
|
||||||
|
|
|
@ -1004,8 +1004,9 @@ public class XMLPersistenceMappingParser
|
||||||
if (val != null)
|
if (val != null)
|
||||||
col.setIdentifier(DBIdentifier.newColumn(val, delimit()));
|
col.setIdentifier(DBIdentifier.newColumn(val, delimit()));
|
||||||
val = attrs.getValue("referenced-column-name");
|
val = attrs.getValue("referenced-column-name");
|
||||||
if (val != null)
|
if (val != null) {
|
||||||
col.setTargetIdentifier(DBIdentifier.newColumn(val, delimit()));
|
setTargetIdentifier(col, val);
|
||||||
|
}
|
||||||
val = attrs.getValue("column-definition");
|
val = attrs.getValue("column-definition");
|
||||||
if (val != null)
|
if (val != null)
|
||||||
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(val));
|
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(val));
|
||||||
|
@ -1041,6 +1042,23 @@ public class XMLPersistenceMappingParser
|
||||||
return col;
|
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.
|
* Parse collectionTable.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue