https://bugs.eclipse.org/bugs/show_bug.cgi?id=373675
DBWS DDLParser: Parser returning type name with prepended schema name
for types that are columns in a table

Change columnSpec() in DDLParser.jjt to check for dotted-name
for column type; if the first part of the dotted-name is the same
as the enclosedType's schema name, only use the second part as
the name of the column type
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
index 0d648bc..d451cc4 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.java
@@ -1243,6 +1243,16 @@
       ;

     }

       if (s != null) {

+          if (s.contains(".")) {

+              int dotIdx = s.indexOf(".");

+              String namePart1 = s.substring(0, dotIdx);

+              String namePart2 = s.substring(dotIdx+1, s.length());

+              if (enclosingType.isTableType()) {

+                 if (((TableType)enclosingType).getSchema().equals(namePart1)) {

+                     s = namePart2;

+                 }

+              }

+          }

           for (String typeName : localTypes.keySet()) {

               if (typeName.equals(s)) {

                   dt = localTypes.get(s);

@@ -3309,21 +3319,6 @@
     catch(LookaheadSuccess ls) { return true; }

   }

 

-  private boolean jj_3R_76() {

-    if (jj_scan_token(O_OPENPAREN)) return true;

-    if (jj_scan_token(S_NUMBER)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_61() {

-    if (jj_scan_token(K_DAY)) return true;

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_3R_84()) jj_scanpos = xsp;

-    if (jj_scan_token(R_TO)) return true;

-    return false;

-  }

-

   private boolean jj_3R_51() {

     if (jj_scan_token(K_NATIONAL)) return true;

     Token xsp;

@@ -3339,11 +3334,6 @@
     return false;

   }

 

-  private boolean jj_3R_57() {

-    if (jj_3R_80()) return true;

-    return false;

-  }

-

   private boolean jj_3R_24() {

     if (jj_scan_token(K_INTERVAL)) return true;

     Token xsp;

@@ -3366,11 +3356,6 @@
     return false;

   }

 

-  private boolean jj_3_2() {

-    if (jj_3R_7()) return true;

-    return false;

-  }

-

   private boolean jj_3R_22() {

     if (jj_scan_token(K_BOOLEAN)) return true;

     return false;

@@ -3390,16 +3375,6 @@
     return false;

   }

 

-  private boolean jj_3R_12() {

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_3_2()) {

-    jj_scanpos = xsp;

-    if (jj_3R_57()) return true;

-    }

-    return false;

-  }

-

   private boolean jj_3R_74() {

     if (jj_scan_token(O_OPENPAREN)) return true;

     if (jj_scan_token(S_NUMBER)) return true;

@@ -3411,12 +3386,22 @@
     return false;

   }

 

+  private boolean jj_3R_57() {

+    if (jj_3R_80()) return true;

+    return false;

+  }

+

   private boolean jj_3R_59() {

     if (jj_scan_token(O_OPENPAREN)) return true;

     if (jj_scan_token(S_NUMBER)) return true;

     return false;

   }

 

+  private boolean jj_3_2() {

+    if (jj_3R_7()) return true;

+    return false;

+  }

+

   private boolean jj_3R_83() {

     if (jj_scan_token(O_COMMA)) return true;

     return false;

@@ -3438,6 +3423,16 @@
     return false;

   }

 

+  private boolean jj_3R_12() {

+    Token xsp;

+    xsp = jj_scanpos;

+    if (jj_3_2()) {

+    jj_scanpos = xsp;

+    if (jj_3R_57()) return true;

+    }

+    return false;

+  }

+

   private boolean jj_3R_56() {

     if (jj_scan_token(S_QUOTED_IDENTIFIER)) return true;

     return false;

@@ -3521,20 +3516,15 @@
     return false;

   }

 

-  private boolean jj_3R_6() {

-    if (jj_3R_11()) return true;

-    if (jj_3R_12()) return true;

-    return false;

-  }

-

   private boolean jj_3R_69() {

     if (jj_scan_token(O_OPENPAREN)) return true;

     if (jj_scan_token(S_NUMBER)) return true;

     return false;

   }

 

-  private boolean jj_3_1() {

-    if (jj_3R_6()) return true;

+  private boolean jj_3R_6() {

+    if (jj_3R_11()) return true;

+    if (jj_3R_12()) return true;

     return false;

   }

 

@@ -3564,6 +3554,11 @@
     return false;

   }

 

+  private boolean jj_3_1() {

+    if (jj_3R_6()) return true;

+    return false;

+  }

+

   private boolean jj_3R_46() {

     if (jj_scan_token(K_VARCHAR2)) return true;

     Token xsp;

@@ -4039,6 +4034,11 @@
     return false;

   }

 

+  private boolean jj_3R_84() {

+    if (jj_scan_token(O_OPENPAREN)) return true;

+    return false;

+  }

+

   private boolean jj_3R_10() {

     Token xsp;

     xsp = jj_scanpos;

@@ -4307,8 +4307,18 @@
     return false;

   }

 

-  private boolean jj_3R_84() {

+  private boolean jj_3R_76() {

     if (jj_scan_token(O_OPENPAREN)) return true;

+    if (jj_scan_token(S_NUMBER)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_61() {

+    if (jj_scan_token(K_DAY)) return true;

+    Token xsp;

+    xsp = jj_scanpos;

+    if (jj_3R_84()) jj_scanpos = xsp;

+    if (jj_scan_token(R_TO)) return true;

     return false;

   }

 

diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
index aa2af3c..48bac8d 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jj
Binary files differ
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
index e0e0fd7..7b8adb7 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/parser/DDLParser.jjt
Binary files differ
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
index b116990..00f0554 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/util/DatabaseTypeBuilder.java
@@ -504,7 +504,8 @@
     	List<String> percentNameList = new ArrayList<String>();

     	List<String> nonPercentNameList = new ArrayList<String>();

         for (UnresolvedType uType : unresolvedTypes) {

-        	if (uType.getTypeName().contains(PERCENT)) {

+            CompositeDatabaseType owningType = uType.getOwningType();

+        	if (owningType != null && (owningType.isTYPEType() || owningType.isROWTYPEType())) {

         		if (!percentNameList.contains(uType.getTypeName())) {

         			percentNameList.add(uType.getTypeName());

         		}

@@ -573,17 +574,21 @@
 				if (owningType.isROWTYPEType()) {

 	                ROWTYPEType rType = (ROWTYPEType)owningType;

 	                String tableName = rType.getTypeName();

+	                if (tableName.contains(ROWTYPE_MACRO)) {

+	                    int idx = tableName.indexOf(ROWTYPE_MACRO);

+	                    tableName = tableName.substring(0,idx);

+	                }

 	                resolvedType = (CompositeDatabaseType)typesRepository.getDatabaseType(tableName);

 	                if (resolvedType == null) {

 	                    TableType tableType = null;

-	                    List<TableType> tables = buildTables(conn, null, tableName, false);

+	                    List<TableType> tables = buildTables(conn, schemaPattern, tableName, false);

 	                    if (tables != null && tables.size() > 0) {

 	                        tableType = tables.get(0);

 	                        typesRepository.setDatabaseType(tableType.getTableName(), tableType);

 	                        rType.setEnclosedType(tableType);

-	                        uType.getOwningType().setEnclosedType(rType);

 	                        typesRepository.setDatabaseType(rType.getTypeName(), rType);

 	                    }

+                        resolvedType = tableType;

 	                    // always a chance that tableType has some unresolved column type

 	                    if (tableType != null && !tableType.isResolved()) {

 	                        UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();

diff --git a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/TypeResolutionTestSuite.java b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/TypeResolutionTestSuite.java
index cf37fe0..ed851cf 100644
--- a/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/TypeResolutionTestSuite.java
+++ b/oracleddlparser/src/test/java/org/eclipse/persistence/tools/oracleddl/test/databasetypebuilder/TypeResolutionTestSuite.java
@@ -20,7 +20,7 @@
 //JUnit4 imports
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
+//import org.junit.Ignore;
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
@@ -274,8 +274,7 @@
 
     }
 
-    //@Test
-    @Ignore
+    @Test
     public void testUnresolvedTypeResolution() throws ParseException {
         assertEquals("incorrect procedure name", DDLRESOLVTEST_PACKAGE , ddlresolvtestPackage.getPackageName());
         UnresolvedTypesVisitor visitor = new UnresolvedTypesVisitor();
@@ -346,8 +345,7 @@
             0, visitor.getUnresolvedTypes().size());
     }
 
-    //@Test
-    @Ignore
+    @Test
     public void testTableTypeRefersToGlobalTypes() {
         boolean worked = true;
         String msg = null;
@@ -366,8 +364,7 @@
             0, visitor.getUnresolvedTypes().size());
     }
 
-    //@Test
-    @Ignore
+    @Test
     public void testPLSQLRecordTypeRefersToDifferentPackage() {
         boolean worked = true;
         String msg = null;