Author: faywang
Date: Tue Nov 30 00:02:46 2010
New Revision: 1040350
URL: http://svn.apache.org/viewvc?rev=1040350&view=rev
Log:
OPENJPA-1893: The test case exposes a reserved-word column name problem for
Oracle and Sybase with SchemaAction='drop,add'
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java?rev=1040350&r1=1040349&r2=1040350&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/SchemaTool.java
Tue Nov 30 00:02:46 2010
@@ -807,10 +807,11 @@ public class SchemaTool {
continue;
dbCols = dbTable.getColumns();
- for (int k = 0; k < dbCols.length; k++)
- if (tabs[j].getColumn(dbCols[k].getIdentifier()) == null)
+ for (int k = 0; k < dbCols.length; k++) {
+ if
(!dbCols[k].getIdentifier().getName().equals(_dict.getIdentityColumnName()) &&
+ !tabs[j].containsColumn(dbCols[k]))
continue tables;
-
+ }
drops.add(tabs[j]);
}
}
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java?rev=1040350&r1=1040349&r2=1040350&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java
Tue Nov 30 00:02:46 2010
@@ -364,6 +364,21 @@ public class Table
return _colMap.containsKey(sName);
}
+ public boolean containsColumn(Column col) {
+ DBIdentifier colName = col.getIdentifier();
+ if (DBIdentifier.isNull(colName) || _colMap == null) {
+ return false;
+ }
+ DBIdentifier sName = DBIdentifier.toUpper(colName);
+ Collection<Column> coll = _colMap.values();
+ for (Column column : coll) {
+ if (column.getIdentifier().equals(sName))
+ return true;
+ }
+
+ return false;
+ }
+
/**
* Add a column to the table.
* @deprecated
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=1040350&r1=1040349&r2=1040350&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
Tue Nov 30 00:02:46 2010
@@ -5460,4 +5460,9 @@ public class DBDictionary
public String getIsNotNullSQL(String colAlias, int colType) {
return String.format("%s IS NOT NULL", colAlias);
}
+
+ public String getIdentityColumnName() {
+ return null;
+ }
+
}
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java?rev=1040350&r1=1040349&r2=1040350&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SybaseDictionary.java
Tue Nov 30 00:02:46 2010
@@ -479,4 +479,10 @@ public class SybaseDictionary
}
return super.getIsNotNullSQL(colAlias, colType);
}
+
+ @Override
+ public String getIdentityColumnName() {
+ return identityColumnName;
+ }
+
}