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;       
+    }
+
 }


Reply via email to