You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2013/03/27 21:05:24 UTC
svn commit: r1461833 - in
/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc:
AnnotationPersistenceMappingParser.java XMLPersistenceMappingParser.java
Author: ppoddar
Date: Wed Mar 27 20:05:24 2013
New Revision: 1461833
URL: http://svn.apache.org/r1461833
Log:
OPENJPA-1979: reference column name starting with single-quote *not* delimited as they have special semantics for non-standard constant join
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java
openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java?rev=1461833&r1=1461832&r2=1461833&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java Wed Mar 27 20:05:24 2013
@@ -490,7 +490,7 @@ public class AnnotationPersistenceMappin
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;
}
@@ -1737,13 +1737,32 @@ public class AnnotationPersistenceMappin
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).
@@ -1820,14 +1839,14 @@ public class AnnotationPersistenceMappin
/**
* 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());
@@ -1992,14 +2011,14 @@ public class AnnotationPersistenceMappin
/**
* 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());
@@ -2087,7 +2106,7 @@ public class AnnotationPersistenceMappin
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 ());
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java?rev=1461833&r1=1461832&r2=1461833&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/XMLPersistenceMappingParser.java Wed Mar 27 20:05:24 2013
@@ -1055,8 +1055,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));
@@ -1093,6 +1094,23 @@ public class XMLPersistenceMappingParser
}
/**
+ * 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.
*/
private boolean startCollectionTable(Attributes attrs)