You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mt...@apache.org on 2010/04/18 21:28:03 UTC
svn commit: r935395 - in /openjpa/branches/1.3.x:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/
openjpa-persistence-jdbc/src/t...
Author: mtylenda
Date: Sun Apr 18 19:28:03 2010
New Revision: 935395
URL: http://svn.apache.org/viewvc?rev=935395&view=rev
Log:
OPENJPA-1289: Fix incorrect mapping of XMLTYPE column on Oracle.
Modified:
openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Column.java
openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/query/TestXMLCustomerOrder.java
Modified: openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java?rev=935395&r1=935394&r2=935395&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java (original)
+++ openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java Sun Apr 18 19:28:03 2010
@@ -682,7 +682,7 @@ public abstract class MappingInfo
}
type =
dict.getJDBCType(tmplate.getJavaType(), size == -1, precis,
- scale);
+ scale, tmplate.isXML());
}
boolean ttype = true;
Modified: openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Column.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Column.java?rev=935395&r1=935394&r2=935395&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Column.java (original)
+++ openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Column.java Sun Apr 18 19:28:03 2010
@@ -642,6 +642,15 @@ public class Column
default:
return false;
}
+ case 2007: // Oracle-defined opaque type code for XMLType
+ switch (type) {
+ case Types.CHAR:
+ case Types.LONGVARCHAR:
+ case Types.VARCHAR:
+ return true;
+ default:
+ return false;
+ }
default:
return type == getType();
}
Modified: openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=935395&r1=935394&r2=935395&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java (original)
+++ openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java Sun Apr 18 19:28:03 2010
@@ -1466,6 +1466,15 @@ public class DBDictionary
* {@link JavaTypes} or {@link JavaSQLTypes} constant.
*/
public int getJDBCType(int metaTypeCode, boolean lob, int precis,
+ int scale, boolean xml) {
+ return getJDBCType(metaTypeCode, lob, precis, scale);
+ }
+
+ /**
+ * Return the preferred {@link Types} constant for the given
+ * {@link JavaTypes} or {@link JavaSQLTypes} constant.
+ */
+ public int getJDBCType(int metaTypeCode, boolean lob, int precis,
int scale) {
if (lob) {
switch (metaTypeCode) {
Modified: openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=935395&r1=935394&r2=935395&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java (original)
+++ openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java Sun Apr 18 19:28:03 2010
@@ -40,6 +40,7 @@ import java.util.Map;
import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
import org.apache.openjpa.jdbc.kernel.exps.FilterValue;
+import org.apache.openjpa.jdbc.meta.JavaSQLTypes;
import org.apache.openjpa.jdbc.schema.Column;
import org.apache.openjpa.jdbc.schema.ForeignKey;
import org.apache.openjpa.jdbc.schema.Index;
@@ -50,6 +51,7 @@ import org.apache.openjpa.lib.jdbc.Deleg
import org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement;
import org.apache.openjpa.lib.util.J2DoPrivHelper;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.meta.JavaTypes;
import org.apache.openjpa.util.StoreException;
import org.apache.openjpa.util.UserException;
@@ -154,7 +156,7 @@ public class OracleDictionary
timeTypeName = "DATE";
varcharTypeName = "VARCHAR2{0}";
fixedSizeTypeNameSet.addAll(Arrays.asList(new String[]{
- "LONG RAW", "RAW", "LONG", "REF",
+ "LONG RAW", "RAW", "LONG", "REF", "XMLTYPE",
}));
reservedWordSet.addAll(Arrays.asList(new String[]{
"ACCESS", "AUDIT", "CLUSTER", "COMMENT", "COMPRESS", "EXCLUSIVE",
@@ -865,6 +867,16 @@ public class OracleDictionary
return sql;
}
+ /**
+ * Return the preferred {@link Types} constant for the given
+ * {@link JavaTypes} or {@link JavaSQLTypes} constant.
+ */
+ @Override
+ public int getJDBCType(int metaTypeCode, boolean lob, int precis,
+ int scale, boolean xml) {
+ return getJDBCType(metaTypeCode, lob && !xml, precis, scale);
+ }
+
public String[] getCreateSequenceSQL(Sequence seq) {
String[] sql = super.getCreateSequenceSQL(seq);
if (seq.getAllocate() > 1)
Modified: openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/query/TestXMLCustomerOrder.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/query/TestXMLCustomerOrder.java?rev=935395&r1=935394&r2=935395&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/query/TestXMLCustomerOrder.java (original)
+++ openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xmlmapping/query/TestXMLCustomerOrder.java Sun Apr 18 19:28:03 2010
@@ -30,19 +30,15 @@ import org.apache.openjpa.jdbc.conf.JDBC
import org.apache.openjpa.jdbc.sql.DBDictionary;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
-import org.apache.openjpa.persistence.test.AllowFailure;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
import org.apache.openjpa.persistence.xmlmapping.entities.Customer;
import org.apache.openjpa.persistence.xmlmapping.entities.EAddress;
import org.apache.openjpa.persistence.xmlmapping.entities.Order;
import org.apache.openjpa.persistence.xmlmapping.entities.Customer.CreditRating;
import org.apache.openjpa.persistence.xmlmapping.xmlbindings.myaddress.Address;
-import org.apache.openjpa.persistence.xmlmapping.xmlbindings.myaddress.
- CANAddress;
-import org.apache.openjpa.persistence.xmlmapping.xmlbindings.myaddress.
- ObjectFactory;
-import org.apache.openjpa.persistence.xmlmapping.xmlbindings.myaddress.
- USAAddress;
+import org.apache.openjpa.persistence.xmlmapping.xmlbindings.myaddress.CANAddress;
+import org.apache.openjpa.persistence.xmlmapping.xmlbindings.myaddress.ObjectFactory;
+import org.apache.openjpa.persistence.xmlmapping.xmlbindings.myaddress.USAAddress;
/**
* Test query with predicates on persistent field mapped to XML column.
@@ -74,7 +70,7 @@ public class TestXMLCustomerOrder
enabled = true;
setUp(Customer.class, Customer.CustomerKey.class, Order.class,
- EAddress.class, CLEAR_TABLES);
+ EAddress.class, DROP_TABLES); // test create table DDL for XML column
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
persistEntities(em);