You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by dw...@apache.org on 2009/06/23 18:18:28 UTC

svn commit: r787741 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/

Author: dwoods
Date: Tue Jun 23 16:18:28 2009
New Revision: 787741

URL: http://svn.apache.org/viewvc?rev=787741&view=rev
Log:
OPENJPA-946 Oracle create table(s) exceptions.  Updated patch and tests provided by Tim McConnell.

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/ResWordEntity.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/TestResWordEntity.java   (with props)
Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.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/DerbyDictionary.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/EntityReservedWords.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java?rev=787741&r1=787740&r2=787741&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java Tue Jun 23 16:18:28 2009
@@ -647,9 +647,28 @@
 
         // find existing column
         Column col = table.getColumn(colName);
-        if (col == null && !adapt)
-            throw new MetaDataException(_loc.get(prefix + "-bad-col-name",
-                context, colName, table));
+        if (col == null && !adapt) {
+            // 
+            // See if column name has already been validated in a dynamic table.
+            // If so then want to use that validated column name instead. This
+            // should seldom if ever occur as long as the database dictionaries
+            // are kept up-to-date. 
+            // 
+            if ((colName.length() > dict.maxColumnNameLength) || 
+               dict.getInvalidColumnWordSet().contains(colName.toUpperCase()) &&
+              !(table.getClass().getName().contains("DynamicTable"))) {
+                colName=dict.getValidColumnName(colName, new Table());
+                col = table.getColumn(colName);
+                if (col == null && !adapt) {
+                    throw new MetaDataException(_loc.
+                        get(prefix + "-bad-col-name", context, colName, table));
+                }
+            }
+            else {
+                throw new MetaDataException(_loc.
+                    get(prefix + "-bad-col-name", context, colName, table));
+            }
+        }
 
         // use information from template column by default, allowing any
         // user-given specifics to override it

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?rev=787741&r1=787740&r2=787741&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java Tue Jun 23 16:18:28 2009
@@ -133,7 +133,7 @@
             "CLUSTER", "COLLECTION", "COLLID", "COMMENT", "CONCAT",
             "CONDITION", "CONTAINS", "COUNT_BIG", "CURRENT_LC_CTYPE",
             "CURRENT_PATH", "CURRENT_SERVER", "CURRENT_TIMEZONE", "CYCLE",
-            "DATA", "DATABASE", "DAYS", "DB2GENERAL", "DB2GENRL", "DB2SQL",
+            "DATABASE", "DAYS", "DB2GENERAL", "DB2GENRL", "DB2SQL",
             "DBINFO", "DEFAULTS", "DEFINITION", "DETERMINISTIC", "DISALLOW",
             "DO", "DSNHATTR", "DSSIZE", "DYNAMIC", "EACH", "EDITPROC", "ELSEIF",
             "ENCODING", "END-EXEC1", "ERASE", "EXCLUDING", "EXIT", "FENCED",
@@ -156,14 +156,16 @@
             "SOURCE", "SPECIFIC", "SQLID", "STANDARD", "START", "STATIC",
             "STAY", "STOGROUP", "STORES", "STYLE", "SUBPAGES", "SYNONYM",
             "SYSFUN", "SYSIBM", "SYSPROC", "SYSTEM", "TABLESPACE", "TRIGGER",
-            "TYPE", "UNDO", "UNTIL", "VALIDPROC", "VARIABLE", "VARIANT", "VCAT",
+            "UNDO", "UNTIL", "VALIDPROC", "VARIABLE", "VARIANT", "VCAT",
             "VOLUMES", "WHILE", "WLM", "YEARS",
         }));
         
-        // reservedWordSet subset that can be used as valid column names
-        validColumnWordSet.addAll(Arrays.asList(new String[] {
-            "C", "COUNT", "DATE", "DATA", "LABEL", "LOCALE", "NAME", "NUMBER",
-            "TIMESTAMP", "VALUE", }));
+        // reservedWordSet subset that CANNOT be used as valid column names
+        // (i.e., without surrounding them with double-quotes)
+        invalidColumnWordSet.addAll(Arrays.asList(new String[] {
+            "CONSTRAINT", "END-EXEC", "END-EXEC1", 
+        }));
+
 
         super.setBatchLimit(defaultBatchLimit);
         

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=787741&r1=787740&r2=787741&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 Jun 23 16:18:28 2009
@@ -343,9 +343,8 @@
     protected boolean connected = false;
     protected boolean isJDBC3 = false;
     protected final Set reservedWordSet = new HashSet();
-    // reservedWordSet subset that can be used as valid column names
-    protected Set<String> validColumnWordSet = new HashSet<String>();
-    // reservedWordSet subset that cannot be used as valid column names
+    // reservedWordSet subset that CANNOT be used as valid column names
+    // (i.e., without surrounding them with double-quotes)
     protected Set<String> invalidColumnWordSet = new HashSet<String>();
     protected final Set systemSchemaSet = new HashSet();
     protected final Set systemTableSet = new HashSet();
@@ -4250,10 +4249,6 @@
             reservedWordSet.addAll(Arrays.asList(Strings.split
                 (reservedWords.toUpperCase(), ",", 0)));
 
-        // reservedWordSet subset that cannot be used as valid column names
-        invalidColumnWordSet = new HashSet(reservedWordSet);
-        invalidColumnWordSet.removeAll(validColumnWordSet);
-        
         // add system schemas set by user
         if (systemSchemas != null)
             systemSchemaSet.addAll(Arrays.asList(Strings.split

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java?rev=787741&r1=787740&r2=787741&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DerbyDictionary.java Tue Jun 23 16:18:28 2009
@@ -73,18 +73,48 @@
             "BIGINT", "INTEGER",
         }));
         reservedWordSet.addAll(Arrays.asList(new String[]{
-            "ALIAS", "BIGINT", "BOOLEAN", "CALL", "CLASS",
-            "COPY", "DB2J_DEBUG", "EXECUTE", "EXPLAIN",
-            "FILE", "FILTER", "GETCURRENTCONNECTION", "INDEX",
-            "INSTANCEOF", "KEY", "METHOD", "NEW", "OFF", "OUT", "PROPERTIES",
-            "PUBLICATION", "RECOMPILE", "REFRESH", "RENAME",
-            "RUNTIMESTATISTICS", "STATEMENT", "STATISTICS",
-            "TIMING", "WAIT", "XML",
+            "BOOLEAN", "CALL", "ENDEXEC", "EXPLAIN", "FUNCTION",
+            "GET_CURRENT_CONNECTION", "INOUT", "LONGINT", "LTRIM", "NVARCHAR",
+            "OFF", "OUT", "RTRIM", "SUBSTR", "XML", "XMLEXISTS", "XMLPARSE",
+            "XMLSERIALIZE",
         }));
-        // reservedWordSet subset that can be used as valid column names
-        validColumnWordSet.addAll(Arrays.asList(new String[] {
-            "C", "COUNT", "DATE", "DATA", "NAME", "NUMBER", "NULLABLE",
-            "TIMESTAMP", "TYPE", "VALUE",
+
+        // reservedWordSet subset that CANNOT be used as valid column names
+        // (i.e., without surrounding them with double-quotes)
+        invalidColumnWordSet.addAll(Arrays.asList(new String[] {
+            "ADD", "ALL", "ALLOCATE", "ALTER", "AND", "ANY", "ARE", "AS", "ASC",
+            "ASSERTION", "AT", "AUTHORIZATION", "AVG", "BEGIN", "BETWEEN", 
+            "BIT", "BOOLEAN", "BOTH", "BY", "CALL", "CASCADE", "CASCADED", 
+            "CASE", "CAST", "CHAR", "CHARACTER", "CHARACTER_LENGTH", "CHECK",
+            "CLOSE", "COLLATE", "COLLATION", "COLUMN", "COMMIT", "CONNECT",
+            "CONNECTION", "CONSTRAINT", "CONSTRAINTS", "CONTINUE", "CONVERT",
+            "CORRESPONDING", "CREATE", "CURRENT", "CURRENT_DATE", 
+            "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR",
+            "DEALLOCATE", "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DEFERRABLE",
+            "DEFERRED", "DELETE", "DESC", "DESCRIBE", "DIAGNOSTICS", 
+            "DISCONNECT", "DISTINCT", "DOUBLE", "DROP", "ELSE", "END", 
+            "END-EXEC", "ESCAPE", "EXCEPT", "EXCEPTION", "EXEC", "EXECUTE",
+            "EXISTS", "EXPLAIN", "EXTERNAL", "FALSE", "FETCH", "FIRST", "FLOAT",
+            "FOR", "FOREIGN", "FOUND", "FROM", "FULL", "FUNCTION", "GET", 
+            "GLOBAL", "GO", "GOTO", "GRANT", "GROUP", "HAVING", "HOUR",
+            "IDENTITY", "IMMEDIATE", "IN", "INDICATOR", "INITIALLY", "INNER",
+            "INOUT", "INPUT", "INSENSITIVE", "INSERT", "INT", "INTEGER",
+            "INTERSECT", "INTO", "IS", "ISOLATION", "JOIN", "KEY", "LAST",
+            "LEADING", "LEFT", "LIKE", "LOWER", "LTRIM", "MATCH", "MAX", "MIN",
+            "MINUTE", "NATIONAL", "NATURAL", "NCHAR", "NEXT", "NO", "NOT", 
+            "NULL", "NULLIF", "NUMERIC", "NVARCHAR", "OF", "ON", "ONLY", "OPEN",
+            "OPTION", "OR", "ORDER", "OUT", "OUTER", "OUTPUT", "OVERLAPS", 
+            "PAD", "PARTIAL", "PREPARE", "PRESERVE", "PRIMARY", "PRIOR",
+            "PRIVILEGES", "PROCEDURE", "PUBLIC", "READ", "REAL", "REFERENCES",
+            "RELATIVE", "RESTRICT", "REVOKE", "RIGHT", "ROLLBACK", "ROWS",
+            "RTRIM", "SCHEMA", "SCROLL", "SECOND", "SELECT", "SESSION_USER",
+            "SET", "SMALLINT", "SOME", "SPACE", "SQL", "SQLCODE", "SQLERROR",
+            "SQLSTATE", "SUBSTR", "SUBSTRING", "SUM", "SYSTEM_USER", "TABLE",
+            "TEMPORARY", "TIMEZONE_HOUR", "TIMEZONE_MINUTE", "TO", "TRAILING",
+            "TRANSACTION", "TRANSLATE", "TRANSLATION", "TRIM", "TRUE", "UNION",
+            "UNIQUE", "UNKNOWN", "UPDATE", "UPPER", "USER", "USING", "VALUES",
+            "VARCHAR", "VARYING", "VIEW", "WHENEVER", "WHERE", "WITH", "WORK",
+            "WRITE", "XML", "XMLEXISTS", "XMLPARSE", "XMLSERIALIZE", "YEAR",
         }));
     }
 

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java?rev=787741&r1=787740&r2=787741&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/MySQLDictionary.java Tue Jun 23 16:18:28 2009
@@ -105,15 +105,33 @@
             "TINYTEXT", "DOUBLE PRECISION", "ENUM", "SET", "DATETIME",
         }));
         reservedWordSet.addAll(Arrays.asList(new String[]{
-            "INT1", "INT2", "INT4", "FLOAT1", "FLOAT2", "FLOAT4",
             "AUTO_INCREMENT", "BINARY", "BLOB", "CHANGE", "ENUM", "INFILE",
-            "LOAD", "MEDIUMINT", "OPTION", "OUTFILE", "REPLACE",
-            "SET", "STARTING", "TEXT", "UNSIGNED", "ZEROFILL",
+            "INT1", "INT2", "INT4", "FLOAT1", "FLOAT2", "FLOAT4", "LOAD",
+            "MEDIUMINT", "OUTFILE", "REPLACE", "STARTING", "TEXT", "UNSIGNED", 
+            "ZEROFILL",
         }));
-        // reservedWordSet subset that can be used as valid column names
-        validColumnWordSet.addAll(Arrays.asList(new String[]{
-            "C", "COUNT", "DATE", "DATA", "NAME", "NULLABLE", "NUMBER", 
-            "TIMESTAMP", "TYPE", "VALUE", 
+
+        // reservedWordSet subset that CANNOT be used as valid column names
+        // (i.e., without surrounding them with double-quotes)
+        invalidColumnWordSet.addAll(Arrays.asList(new String[]{
+            "ADD", "ALL", "ALTER", "AND", "AS", "ASC", "BETWEEN", "BINARY",
+            "BLOB", "BOTH", "BY", "CASCADE", "CASE", "CHANGE", "CHAR", 
+            "CHARACTER", "CHECK", "COLLATE", "COLUMN", "CONSTRAINT", "CONTINUE",
+            "CONVERT", "CREATE", "CROSS", "CURRENT_DATE", "CURRENT_TIME",
+            "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "DEC", "DECIMAL",
+            "DECLARE", "DEFAULT", "DELETE", "DESC", "DESCRIBE", "DISTINCT",
+            "DOUBLE", "DROP", "ELSE", "END-EXEC", "EXISTS", "FALSE", "FETCH",
+            "FLOAT", "FLOAT4", "FOR", "FOREIGN", "FROM", "GRANT", "GROUP",
+            "HAVING", "IN", "INFILE", "INNER", "INSENSITIVE", "INSERT", "INT",
+            "INT1", "INT2", "INT4", "INTEGER", "INTERVAL", "INTO", "IS", "JOIN",
+            "KEY", "LEADING", "LEFT", "LIKE", "LOAD", "MATCH", "MEDIUMINT",
+            "NATURAL", "NOT", "NULL", "NUMERIC", "ON", "OPTION", "OR", "ORDER",
+            "OUTER", "OUTFILE", "PRECISION", "PRIMARY", "PROCEDURE", "READ",
+            "REAL", "REFERENCES", "REPLACE", "RESTRICT", "REVOKE", "RIGHT",
+            "SCHEMA", "SELECT", "SET", "SMALLINT", "SQL", "SQLSTATE",
+            "STARTING", "TABLE", "THEN", "TO", "TRAILING", "TRUE", "UNION",
+            "UNIQUE", "UNSIGNED", "UPDATE", "USAGE", "USING", "VALUES",
+            "VARCHAR", "VARYING", "WHEN", "WHERE", "WITH", "WRITE", "ZEROFILL",
         }));
 
         // MySQL requires double-escape for strings

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=787741&r1=787740&r2=787741&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java Tue Jun 23 16:18:28 2009
@@ -163,10 +163,24 @@
             "LONG", "MAXEXTENTS", "MINUS", "MODE", "NOAUDIT", "NOCOMPRESS",
             "NOWAIT", "OFFLINE", "ONLINE", "PCTFREE", "ROW",
         }));
-        // reservedWordSet subset that can be used as valid column names
-        validColumnWordSet.addAll(Arrays.asList(new String[]{
-            "C", "COUNT", "DATA", "NAME", "NULLABLE", "STORE", "TIMESTAMP", 
-            "TYPE", "VALUE", "VERSION", 
+
+        // reservedWordSet subset that CANNOT be used as valid column names
+        // (i.e., without surrounding them with double-quotes)
+        invalidColumnWordSet.addAll(Arrays.asList(new String[]{
+            "ACCESS", "ADD", "ALL", "ALTER", "AND", "ANY", "AS", "ASC", "AUDIT",
+            "BETWEEN", "BY", "CHAR", "CHECK", "CLUSTER", "COLUMN", "COMMENT",
+            "COMPRESS", "CONNECT", "CREATE", "CURRENT", "DATE", "DECIMAL",
+            "DEFAULT", "DELETE", "DESC", "DISTINCT", "DROP", "ELSE", "END-EXEC",
+            "EXCLUSIVE", "EXISTS", "FILE", "FLOAT", "FOR", "FROM", "GRANT",
+            "GROUP", "HAVING", "IDENTIFIED", "IMMEDIATE", "IN", "INCREMENT",
+            "INDEX", "INITIAL", "INSERT", "INTEGER", "INTERSECT", "INTO",
+            "IS", "LEVEL", "LIKE", "LOCK", "LONG", "MAXEXTENTS", "MINUS",
+            "MODE", "NOAUDIT", "NOCOMPRESS", "NOT", "NOWAIT", "NULL", "NUMBER",
+            "OF", "OFFLINE", "ON", "ONLINE", "OPTION", "OR", "ORDER", "PCTFREE",
+            "PRIOR", "PRIVILEGES", "PUBLIC", "REVOKE", "ROW", "ROWS", "SELECT",
+            "SESSION", "SET", "SIZE", "SMALLINT", "TABLE", "THEN", "TO",
+            "UNION", "UNIQUE", "UPDATE", "USER", "VALUES", "VARCHAR", "VIEW",
+            "WHENEVER", "WHERE", "WITH",
         }));
 
         substringFunctionName = "SUBSTR";

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java?rev=787741&r1=787740&r2=787741&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/PostgresDictionary.java Tue Jun 23 16:18:28 2009
@@ -180,10 +180,22 @@
             "RETRIEVE", "RETURNS", "RULE", "SETOF", "STDIN", "STDOUT",
             "STORE", "VACUUM", "VERBOSE", "VERSION",
         }));
-        // reservedWordSet subset that can be used as valid column names
-        validColumnWordSet.addAll(Arrays.asList(new String[] {
-            "C", "COUNT", "DATE", "DATA", "NAME", "NULLABLE", "NUMBER", "OID",
-            "STORE", "TIMESTAMP", "TYPE", "VALUE", "VERSION",
+
+        // reservedWordSet subset that CANNOT be used as valid column names
+        // (i.e., without surrounding them with double-quotes)
+        invalidColumnWordSet.addAll(Arrays.asList(new String[] {
+            "ALL", "AND", "ANY", "AS", "ASC", "AUTHORIZATION", "BETWEEN", 
+            "BINARY", "BOTH", "CASE", "CAST", "CHECK", "COLLATE", "COLUMN",
+            "CONSTRAINT", "CREATE", "CROSS", "CURRENT_DATE", "CURRENT_TIME",
+            "CURRENT_TIMESTAMP", "CURRENT_USER", "DEFAULT", "DEFERRABLE", 
+            "DESC", "DISTINCT", "DO", "ELSE", "END", "END", "EXCEPT", "FALSE",
+            "FOR", "FOREIGN", "FROM", "FULL", "GRANT", "GROUP", "HAVING", "IN",
+            "INITIALLY", "INNER", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN",
+            "LEADING", "LEFT", "LIKE", "NATURAL", "NOT", "NOTNULL", "NULL", 
+            "ON", "ONLY", "OR", "ORDER", "OUTER", "OVERLAPS", "PRIMARY",
+            "REFERENCES", "RIGHT", "SELECT", "SESSION_USER", "SOME", "TABLE",
+            "THEN", "TO", "TRAILING", "TRUE", "UNION", "UNIQUE", "USER", 
+            "USING", "VERBOSE", "WHEN", "WHERE",
         }));
     }
 

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/EntityReservedWords.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/EntityReservedWords.java?rev=787741&r1=787740&r2=787741&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/EntityReservedWords.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/EntityReservedWords.java Tue Jun 23 16:18:28 2009
@@ -96,6 +96,9 @@
     private Integer years;
     private Date zerofill;
     private String zone; 
+    private Integer type;
+    private String alias;
+    private int Boolean;
 
     public EntityReservedWords() {
     }
@@ -484,4 +487,25 @@
     public void setZone(String zone) {
         this.zone = zone;
     } 
+
+    public Integer getType() {
+        return type;
+    }
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    public int getBoolean() {
+        return Boolean;
+    }
+    public void setBoolean(int Boolean) {
+        this.Boolean = Boolean;
+    }
 }

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/ResWordEntity.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/ResWordEntity.java?rev=787741&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/ResWordEntity.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/ResWordEntity.java Tue Jun 23 16:18:28 2009
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.dynamicschema;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="ALIAS_TABLE")
+public class ResWordEntity {
+
+    private int id;
+    private String alias;
+    private int Boolean;
+    private Integer type; 
+
+    public void setId(int id) {
+        this.id = id;
+    }
+    @Id
+    public int getId() {
+        return id;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+    @Column(name="ALIAS")
+    public String getAlias() {
+        return alias;
+    }
+
+    public int getBoolean() {
+        return Boolean;
+    }
+    public void setBoolean(int Boolean) {
+        this.Boolean = Boolean;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+    public void setType(Integer type) {
+        this.type = type;
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/ResWordEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/TestResWordEntity.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/TestResWordEntity.java?rev=787741&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/TestResWordEntity.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/TestResWordEntity.java Tue Jun 23 16:18:28 2009
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.dynamicschema;
+
+import java.util.Random;
+import javax.persistence.EntityManager;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+/**
+ * <b>TestResWordEntity</b> is used to test the case where reserved words are 
+ * translated when multiple schema factories are invoked. In this test the 
+ * SynchronizeMapping setting will cause the DynamicSchemaFactory to be 
+ * invoked, and the SchemaFactory setting will cause the LazySchemaFactory to
+ * be invoked. 
+ */
+public class TestResWordEntity extends SingleEMFTestCase {
+
+    public void setUp() {
+    }
+
+    public void testMultipleSchemafactories1() {
+        OpenJPAEntityManagerFactorySPI emf = 
+            createEMF(ResWordEntity.class,
+            "openjpa.ConnectionURL", 
+            "jdbc:derby:net://host:1527/databaseName",
+            "openjpa.jdbc.SynchronizeMappings","buildSchema(ForeignKeys=true)", 
+            "openjpa.jdbc.SchemaFactory","native(ForeignKeys=true)");
+
+        EntityManager em = emf.createEntityManager();
+        ResWordEntity pe = new ResWordEntity();
+
+        pe.setId(new Random().nextInt());
+        pe.setAlias("AliasVal");
+
+        em.getTransaction().begin();
+        em.persist(pe);
+        em.getTransaction().commit();
+
+        em.clear();
+        ResWordEntity re = em.find(ResWordEntity.class, pe.getId());
+        em.clear();
+        re = em.find(ResWordEntity.class, pe.getId());
+
+        em.close();
+    }
+
+    public void testMultipleSchemafactories2() {
+        OpenJPAEntityManagerFactorySPI emf = 
+            createEMF(ResWordEntity.class,
+            "openjpa.ConnectionURL", 
+            "jdbc:derby:net://host:1527/databaseName",
+            "openjpa.jdbc.SchemaFactory","native(ForeignKeys=true)",
+            "openjpa.jdbc.SynchronizeMappings","buildSchema(ForeignKeys=true)");
+
+        EntityManager em = emf.createEntityManager();
+        ResWordEntity pe = new ResWordEntity();
+
+        pe.setId(new Random().nextInt());
+        pe.setAlias("AliasVal");
+
+        em.getTransaction().begin();
+        em.persist(pe);
+        em.getTransaction().commit();
+
+        em.clear();
+        ResWordEntity re = em.find(ResWordEntity.class, pe.getId());
+        em.clear();
+        re = em.find(ResWordEntity.class, pe.getId());
+
+        em.close();
+    }
+
+    public void testMultipleSchemafactories3() {
+        OpenJPAEntityManagerFactorySPI emf = 
+            createEMF(ResWordEntity.class,
+            "openjpa.ConnectionURL", 
+            "jdbc:derby:net://host:1527/databaseName",
+            "openjpa.jdbc.SynchronizeMappings","buildSchema(ForeignKeys=true)");
+
+        EntityManager em = emf.createEntityManager();
+        ResWordEntity pe = new ResWordEntity();
+
+        pe.setId(new Random().nextInt());
+        pe.setAlias("AliasVal");
+
+        em.getTransaction().begin();
+        em.persist(pe);
+        em.getTransaction().commit();
+
+        em.clear();
+        ResWordEntity re = em.find(ResWordEntity.class, pe.getId());
+        em.clear();
+        re = em.find(ResWordEntity.class, pe.getId());
+
+        em.close();
+    }
+
+    public void testMultipleSchemafactories4() {
+        OpenJPAEntityManagerFactorySPI emf = 
+            createEMF(ResWordEntity.class,
+            "openjpa.ConnectionURL", 
+            "jdbc:derby:net://host:1527/databaseName",
+            "openjpa.jdbc.SchemaFactory","native(ForeignKeys=true)");
+
+        EntityManager em = emf.createEntityManager();
+        ResWordEntity pe = new ResWordEntity();
+
+        pe.setId(new Random().nextInt());
+        pe.setAlias("AliasVal");
+
+        em.getTransaction().begin();
+        em.persist(pe);
+        em.getTransaction().commit();
+
+        em.clear();
+        ResWordEntity re = em.find(ResWordEntity.class, pe.getId());
+        em.clear();
+        re = em.find(ResWordEntity.class, pe.getId());
+
+        em.close();
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/dynamicschema/TestResWordEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native