Fix for Bug 382418 - DBWS DDLParser: TypeResolutionTestSuite failing due to missing database table
Fix for Bug 382439 - DBWS: null pointer exception in DDLParser.columnTypeSpec
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 e7b9f39..e6da868 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
@@ -1252,26 +1252,20 @@
               int dotIdx = s.indexOf(".");

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

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

+              String schemaName = null;

               if (enclosingType.isTableType()) {

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

-                     s = namePart2;

-                 }

+                 schemaName = ((TableType)enclosingType).getSchema();

               } else if (enclosingType.isObjectTableType()) {

-                 if (((ObjectTableType)enclosingType).getSchema().equals(namePart1)) {

-                     s = namePart2;

-                 }

+                 schemaName = ((ObjectTableType)enclosingType).getSchema();

               } else if (enclosingType.isObjectType()) {

-                 if (((ObjectType)enclosingType).getSchema().equals(namePart1)) {

-                     s = namePart2;

-                 }

+                 schemaName = ((ObjectType)enclosingType).getSchema();

               } else if (enclosingType.isPLSQLType()) {

-                 if (((PLSQLType)enclosingType).getParentType().getSchema().equals(namePart1)) {

-                     s = namePart2;

-                 }

+                 schemaName = ((PLSQLType)enclosingType).getParentType().getSchema();

               } else if (enclosingType.isVArrayType()) {

-                 if (((VArrayType)enclosingType).getSchema().equals(namePart1)) {

-                     s = namePart2;

-                 }

+                 schemaName = ((VArrayType)enclosingType).getSchema();

+              }

+              if (schemaName != null && schemaName.equals(namePart1)) {

+                  s = namePart2;

               }

           }

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

@@ -3463,6 +3457,25 @@
     catch(LookaheadSuccess ls) { return true; }

   }

 

+  private boolean jj_3R_67() {

+    if (jj_scan_token(O_OPENPAREN)) return true;

+    if (jj_scan_token(S_NUMBER)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_90() {

+    if (jj_scan_token(O_COMMA)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_27() {

+    if (jj_scan_token(K_RAW)) return true;

+    Token xsp;

+    xsp = jj_scanpos;

+    if (jj_3R_68()) jj_scanpos = xsp;

+    return false;

+  }

+

   private boolean jj_3R_55() {

     if (jj_scan_token(K_NVARCHAR)) return true;

     Token xsp;

@@ -3476,12 +3489,6 @@
     return false;

   }

 

-  private boolean jj_3R_81() {

-    if (jj_scan_token(O_OPENPAREN)) return true;

-    if (jj_scan_token(S_NUMBER)) return true;

-    return false;

-  }

-

   private boolean jj_3R_65() {

     if (jj_3R_12()) return true;

     return false;

@@ -3492,6 +3499,22 @@
     return false;

   }

 

+  private boolean jj_3R_81() {

+    if (jj_scan_token(O_OPENPAREN)) return true;

+    if (jj_scan_token(S_NUMBER)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_18() {

+    Token xsp;

+    xsp = jj_scanpos;

+    if (jj_3_2()) {

+    jj_scanpos = xsp;

+    if (jj_3R_65()) return true;

+    }

+    return false;

+  }

+

   private boolean jj_3R_14() {

     if (jj_scan_token(R_ANCHORED_ROWTYPE)) return true;

     return false;

@@ -3507,16 +3530,6 @@
     return false;

   }

 

-  private boolean jj_3R_18() {

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_3_2()) {

-    jj_scanpos = xsp;

-    if (jj_3R_65()) return true;

-    }

-    return false;

-  }

-

   private boolean jj_3_12() {

     if (jj_scan_token(K_NOCOPY)) return true;

     return false;

@@ -3636,6 +3649,12 @@
     return false;

   }

 

+  private boolean jj_3R_6() {

+    if (jj_3R_17()) return true;

+    if (jj_3R_18()) return true;

+    return false;

+  }

+

   private boolean jj_3R_75() {

     if (jj_scan_token(O_OPENPAREN)) return true;

     if (jj_scan_token(S_NUMBER)) return true;

@@ -3653,12 +3672,6 @@
     return false;

   }

 

-  private boolean jj_3R_6() {

-    if (jj_3R_17()) return true;

-    if (jj_3R_18()) return true;

-    return false;

-  }

-

   private boolean jj_3R_66() {

     if (jj_scan_token(O_OPENPAREN)) return true;

     Token xsp;

@@ -3684,6 +3697,11 @@
     return false;

   }

 

+  private boolean jj_3_1() {

+    if (jj_3R_6()) return true;

+    return false;

+  }

+

   private boolean jj_3R_25() {

     Token xsp;

     xsp = jj_scanpos;

@@ -3702,11 +3720,6 @@
     return false;

   }

 

-  private boolean jj_3_1() {

-    if (jj_3R_6()) return true;

-    return false;

-  }

-

   private boolean jj_3R_24() {

     if (jj_scan_token(K_SIGNTYPE)) return true;

     return false;

@@ -4199,45 +4212,6 @@
     return false;

   }

 

-  private boolean jj_3R_30() {

-    if (jj_scan_token(K_INTERVAL)) return true;

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_3R_69()) {

-    jj_scanpos = xsp;

-    if (jj_3R_70()) return true;

-    }

-    return false;

-  }

-

-  private boolean jj_3R_83() {

-    if (jj_scan_token(O_OPENPAREN)) return true;

-    if (jj_scan_token(S_NUMBER)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_29() {

-    if (jj_scan_token(K_DATE)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_28() {

-    if (jj_scan_token(K_BOOLEAN)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_9() {

-    if (jj_scan_token(K_RECORD)) return true;

-    if (jj_scan_token(O_OPENPAREN)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_68() {

-    if (jj_scan_token(O_OPENPAREN)) return true;

-    if (jj_scan_token(S_NUMBER)) return true;

-    return false;

-  }

-

   private boolean jj_3R_16() {

     Token xsp;

     xsp = jj_scanpos;

@@ -4506,6 +4480,45 @@
     return false;

   }

 

+  private boolean jj_3R_30() {

+    if (jj_scan_token(K_INTERVAL)) return true;

+    Token xsp;

+    xsp = jj_scanpos;

+    if (jj_3R_69()) {

+    jj_scanpos = xsp;

+    if (jj_3R_70()) return true;

+    }

+    return false;

+  }

+

+  private boolean jj_3R_83() {

+    if (jj_scan_token(O_OPENPAREN)) return true;

+    if (jj_scan_token(S_NUMBER)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_29() {

+    if (jj_scan_token(K_DATE)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_28() {

+    if (jj_scan_token(K_BOOLEAN)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_9() {

+    if (jj_scan_token(K_RECORD)) return true;

+    if (jj_scan_token(O_OPENPAREN)) return true;

+    return false;

+  }

+

+  private boolean jj_3R_68() {

+    if (jj_scan_token(O_OPENPAREN)) return true;

+    if (jj_scan_token(S_NUMBER)) return true;

+    return false;

+  }

+

   private boolean jj_3R_56() {

     if (jj_scan_token(K_NVARCHAR2)) return true;

     Token xsp;

@@ -4520,25 +4533,6 @@
     return false;

   }

 

-  private boolean jj_3R_67() {

-    if (jj_scan_token(O_OPENPAREN)) return true;

-    if (jj_scan_token(S_NUMBER)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_90() {

-    if (jj_scan_token(O_COMMA)) return true;

-    return false;

-  }

-

-  private boolean jj_3R_27() {

-    if (jj_scan_token(K_RAW)) return true;

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_3R_68()) jj_scanpos = xsp;

-    return false;

-  }

-

   /** Generated Token Manager. */

   public DDLParserTokenManager token_source;

   JavaCharStream jj_input_stream;

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 b02fd23..afc7975 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 8b9233d..00f0eea 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/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 ed851cf..ff4c752 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
@@ -53,6 +53,18 @@
 
 public class TypeResolutionTestSuite {
 
+    static final String CREATE_DDLRESOLVTEST_EMP_TABLE =
+        "CREATE TABLE DDLRESOLVTEST_EMP (" +
+            "\nEMPNO NUMERIC(4)," +
+            "\nENAME VARCHAR(10)," +
+            "\nJOB VARCHAR(9)," +
+            "\nMGR NUMERIC(4)," +
+            "\nHIREDATE DATE," +
+            "\nSAL DECIMAL(7,2)," +
+            "\nCOMM NUMERIC(7,2)," +
+            "\nDEPTNO NUMERIC(2)," +
+            "\nPRIMARY KEY (EMPNO)" +
+        "\n)";
     static final String CREATE_DDLRESOLVTEST_TYPE1 =
         "CREATE OR REPLACE TYPE DDLRESOLVTEST_TYPE1 AS OBJECT (" +
         	"\n\tACCT\tNUMBER," +
@@ -110,20 +122,20 @@
     static final String CREATE_DDLRESOLVTEST_PACKAGE =
         "CREATE OR REPLACE PACKAGE " + DDLRESOLVTEST_PACKAGE + " AS" +
             "\n\tTYPE EMPREC IS RECORD ( " +
-                "\n\tEMPNO EMP.EMPNO%TYPE," +
-                "\n\tENAME EMP.ENAME%TYPE," +
-                "\n\tJOB EMP.JOB%TYPE," +
-                "\n\tMGR EMP.MGR%TYPE," +
-                "\n\tHIREDATE EMP.HIREDATE%TYPE," +
-                "\n\tSAL EMP.SAL%TYPE," +
-                "\n\tCOMM EMP.COMM%TYPE," +
-                "\n\tDEPTNO EMP.DEPTNO%TYPE" +
+                "\n\tEMPNO DDLRESOLVTEST_EMP.EMPNO%TYPE," +
+                "\n\tENAME DDLRESOLVTEST_EMP.ENAME%TYPE," +
+                "\n\tJOB DDLRESOLVTEST_EMP.JOB%TYPE," +
+                "\n\tMGR DDLRESOLVTEST_EMP.MGR%TYPE," +
+                "\n\tHIREDATE DDLRESOLVTEST_EMP.HIREDATE%TYPE," +
+                "\n\tSAL DDLRESOLVTEST_EMP.SAL%TYPE," +
+                "\n\tCOMM DDLRESOLVTEST_EMP.COMM%TYPE," +
+                "\n\tDEPTNO DDLRESOLVTEST_EMP.DEPTNO%TYPE" +
             "\n\t);" +
             "\n\tFUNCTION DDLRESOLVTESTFUNC17(PARAM1 IN INTEGER) RETURN DDLRESOLVTEST_TABLE2%ROWTYPE;" +
             "\n\tPROCEDURE DDLRESOLVTESTPROC17(PARAM1 IN INTEGER, REC OUT DDLRESOLVTEST_TABLE2%ROWTYPE);" +
             "\n\tPROCEDURE DDLRESOLVTESTPROC17b(OLDREC IN DDLRESOLVTEST_TABLE3%ROWTYPE, NEWREC OUT DDLRESOLVTEST_TABLE3%ROWTYPE);" +
             "\n\tPROCEDURE EMP_TEST(E1 IN EMPREC, NAME IN VARCHAR2);" +
-            "\n\tPROCEDURE EMP_TEST2(NAME IN EMP.ENAME%TYPE);" +
+            "\n\tPROCEDURE EMP_TEST2(NAME IN DDLRESOLVTEST_EMP.ENAME%TYPE);" +
             "\n\tFUNCTION ECHOREGION(AREGION IN DDLRESOLVTEST_REGION) RETURN DDLRESOLVTEST_REGION;" +
             "\n\tFUNCTION ECHOEMPADDRESS(ANEMPADDRESS IN DDLRESOLVTEST_EMP_ADDRESS) RETURN DDLRESOLVTEST_EMP_ADDRESS;" +
             "\n\tFUNCTION ECHOEMPOBJECT(ANEMPOBJECT IN DDLRESOLVTEST_EMP_OBJECT) RETURN DDLRESOLVTEST_EMP_OBJECT;" +
@@ -140,20 +152,20 @@
                     "\n\tEXIT WHEN C_EMP%NOTFOUND;" +
                 "\n\tEND LOOP;" +
                 "\n\tRETURN L_DATA1;" +
-            "\n\tEND;" +
+            "\n\tEND DDLRESOLVTESTFUNC17;" +
             "\n\tPROCEDURE DDLRESOLVTESTPROC17( PARAM1 IN INTEGER, REC OUT DDLRESOLVTEST_TABLE2%ROWTYPE) AS" +
             "\n\tBEGIN" +
                 "\n\tREC := DDLRESOLVTESTFUNC17(PARAM1);" +
-            "\n\tEND;" +
+            "\n\tEND DDLRESOLVTESTPROC17;" +
             "\n\tPROCEDURE DDLRESOLVTESTPROC17b(OLDREC IN DDLRESOLVTEST_TABLE3%ROWTYPE, NEWREC OUT DDLRESOLVTEST_TABLE3%ROWTYPE) AS" +
             "\n\tBEGIN" +
                 "\n\tNEWREC := OLDREC;" +
-            "\n\tEND;" +
+            "\n\tEND DDLRESOLVTESTPROC17b;" +
             "\n\tPROCEDURE EMP_TEST(E1 IN EMPREC, NAME IN VARCHAR2) AS" +
             "\n\tBEGIN" +
                 "\n\tnull;" +
             "\n\tEND EMP_TEST;" +
-            "\n\tPROCEDURE EMP_TEST2(NAME IN EMP.ENAME%TYPE) AS" +
+            "\n\tPROCEDURE EMP_TEST2(NAME IN DDLRESOLVTEST_EMP.ENAME%TYPE) AS" +
             "\n\tBEGIN" +
                 "\n\tnull;" +
             "\n\tEND EMP_TEST2;" +
@@ -193,6 +205,7 @@
     static final String DROP_DDLRESOLVTEST_TABLE3 = "DROP TABLE DDLRESOLVTEST_TABLE3";
     static final String DROP_DDLRESOLVTEST_TABLE2 = "DROP TABLE DDLRESOLVTEST_TABLE2";
     static final String DROP_DDLRESOLVTEST_TABLE1 = "DROP TABLE DDLRESOLVTEST_TABLE1";
+    static final String DROP_DDLRESOLVTEST_EMP_TABLE = "DROP TABLE DDLRESOLVTEST_EMP";
     static final String DROP_DDLRESOLVTEST_TYPE3 = "DROP TYPE DDLRESOLVTEST_TYPE3";
     static final String DROP_DDLRESOLVTEST_TYPE2 = "DROP TYPE DDLRESOLVTEST_TYPE2";
     static final String DROP_DDLRESOLVTEST_TYPE1 = "DROP TYPE DDLRESOLVTEST_TYPE1";
@@ -227,6 +240,7 @@
             ddlDebug = true;
         }
         if (ddlCreate) {
+            runDdl(conn, CREATE_DDLRESOLVTEST_EMP_TABLE, ddlDebug);
             runDdl(conn, CREATE_DDLRESOLVTEST_TYPE1, ddlDebug);
             runDdl(conn, CREATE_DDLRESOLVTEST_TYPE2, ddlDebug);
             runDdl(conn, CREATE_DDLRESOLVTEST_TYPE3, ddlDebug);
@@ -267,6 +281,7 @@
             runDdl(conn, DROP_DDLRESOLVTEST_TABLE3, ddlDebug);
             runDdl(conn, DROP_DDLRESOLVTEST_TABLE2, ddlDebug);
             runDdl(conn, DROP_DDLRESOLVTEST_TABLE1, ddlDebug);
+            runDdl(conn, DROP_DDLRESOLVTEST_EMP_TABLE, ddlDebug);
             runDdl(conn, DROP_DDLRESOLVTEST_TYPE3, ddlDebug);
             runDdl(conn, DROP_DDLRESOLVTEST_TYPE2, ddlDebug);
             runDdl(conn, DROP_DDLRESOLVTEST_TYPE1, ddlDebug);