Fix for Bug 404305 - DBWS DDLParser: args from different package results extra procedure type being generated ()
diff --git a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLCursorType.java b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLCursorType.java
index d4bc4da..ac8d862 100644
--- a/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLCursorType.java
+++ b/oracleddlparser/src/main/java/org/eclipse/persistence/tools/oracleddl/metadata/PLSQLCursorType.java
@@ -19,6 +19,7 @@
static final String REF_CURSOR = "REF CURSOR";
protected String cursorName;
+ protected PLSQLPackageType parentType;
public PLSQLCursorType(String cursorName) {
super(null);
@@ -41,7 +42,15 @@
return enclosedType == null;
}
- public boolean isResolved() {
+ public PLSQLPackageType getParentType() {
+ return parentType;
+ }
+
+ public void setParentType(PLSQLPackageType parentType) {
+ this.parentType = parentType;
+ }
+
+ public boolean isResolved() {
// if the dataType is unresolved, then this PLSQLCursor is a weakly-typed REF CURSOR
if (enclosedType == null) {
return false;
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 5f9aa44..feeaa56 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
@@ -2954,6 +2954,7 @@
jj_consume_token(K_REF);
jj_consume_token(R_CURSOR);
cursorType = new PLSQLCursorType(cursorTypeName);
+ cursorType.setParentType(packageType);
packageType.addCursor(cursorType);
localTypes.put(cursorTypeName, cursorType);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3763,13 +3764,13 @@
return false;
}
- private boolean jj_3R_20() {
- if (jj_scan_token(K_NATURAL)) return true;
+ private boolean jj_3_13() {
+ if (jj_scan_token(K_OUT)) return true;
return false;
}
- private boolean jj_3_13() {
- if (jj_scan_token(K_OUT)) return true;
+ private boolean jj_3R_20() {
+ if (jj_scan_token(K_NATURAL)) return true;
return false;
}
@@ -3924,14 +3925,14 @@
return false;
}
- private boolean jj_3R_72() {
- if (jj_scan_token(O_OPENPAREN)) return true;
- if (jj_scan_token(S_NUMBER)) return true;
+ private boolean jj_3R_85() {
+ if (jj_scan_token(S_QUOTED_IDENTIFIER)) return true;
return false;
}
- private boolean jj_3R_85() {
- if (jj_scan_token(S_QUOTED_IDENTIFIER)) return true;
+ private boolean jj_3R_72() {
+ if (jj_scan_token(O_OPENPAREN)) return true;
+ if (jj_scan_token(S_NUMBER)) return true;
return false;
}
@@ -3989,11 +3990,6 @@
return false;
}
- private boolean jj_3R_47() {
- if (jj_scan_token(K_ROWID)) return true;
- return false;
- }
-
private boolean jj_3_14() {
if (jj_scan_token(R_IN)) return true;
Token xsp;
@@ -4002,6 +3998,11 @@
return false;
}
+ private boolean jj_3R_47() {
+ if (jj_scan_token(K_ROWID)) return true;
+ return false;
+ }
+
private boolean jj_3R_46() {
if (jj_scan_token(K_BFILE)) return true;
return false;
@@ -4027,6 +4028,16 @@
return false;
}
+ private boolean jj_3R_15() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3_14()) {
+ jj_scanpos = xsp;
+ if (jj_3R_63()) return true;
+ }
+ return false;
+ }
+
private boolean jj_3R_60() {
Token xsp;
xsp = jj_scanpos;
@@ -4040,16 +4051,6 @@
return false;
}
- private boolean jj_3R_15() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3_14()) {
- jj_scanpos = xsp;
- if (jj_3R_63()) return true;
- }
- return false;
- }
-
private boolean jj_3_5() {
if (jj_scan_token(R_EXCEPTION)) return true;
return false;
@@ -4306,14 +4307,14 @@
return false;
}
- private boolean jj_3R_65() {
- if (jj_scan_token(O_OPENPAREN)) return true;
- if (jj_scan_token(S_NUMBER)) return true;
+ private boolean jj_3_11() {
+ if (jj_3R_15()) return true;
return false;
}
- private boolean jj_3_11() {
- if (jj_3R_15()) return true;
+ private boolean jj_3R_65() {
+ if (jj_scan_token(O_OPENPAREN)) return true;
+ if (jj_scan_token(S_NUMBER)) return true;
return false;
}
@@ -4626,14 +4627,14 @@
return false;
}
- private boolean jj_3R_79() {
- if (jj_scan_token(O_OPENPAREN)) return true;
- if (jj_scan_token(S_NUMBER)) return true;
+ private boolean jj_3R_6() {
+ if (jj_scan_token(K_CONSTRUCTOR)) return true;
return false;
}
- private boolean jj_3R_6() {
- if (jj_scan_token(K_CONSTRUCTOR)) return true;
+ private boolean jj_3R_79() {
+ if (jj_scan_token(O_OPENPAREN)) return true;
+ if (jj_scan_token(S_NUMBER)) 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 32ccede..623f483 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 0af6b09..5fa378d 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 94b6381..8938904 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
@@ -23,6 +23,7 @@
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -206,21 +207,25 @@
TreeSet<String> distinctDDLs = new TreeSet<String>();
distinctDDLs.addAll(ddls);
packageTypes = new ArrayList<PLSQLPackageType>();
+ Map<PLSQLPackageType, DDLParser> parserMap = new HashMap<PLSQLPackageType, DDLParser>();
for (String ddl : distinctDDLs) {
DDLParser parser = newDDLParser(ddl, copyOfSchemaPatterns);
PLSQLPackageType packageType = parser.parsePLSQLPackage();
if (packageType != null) {
packageTypes.add(packageType);
- if (resolveTypes) {
- UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();
- unresolvedTypesVisitor.visit(packageType);
- if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {
- resolvedTypes(conn, packageType.getSchema(), parser,
- unresolvedTypesVisitor.getUnresolvedTypes(), packageType, packageTypes);
- }
- }
+ parserMap.put(packageType, parser);
}
}
+ if (!parserMap.isEmpty() && resolveTypes) {
+ for (PLSQLPackageType packageType : parserMap.keySet()) {
+ DDLParser parser = parserMap.get(packageType);
+ UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();
+ unresolvedTypesVisitor.visit(packageType);
+ if (!unresolvedTypesVisitor.getUnresolvedTypes().isEmpty()) {
+ resolvedTypes(conn, packageType.getSchema(), parser, unresolvedTypesVisitor.getUnresolvedTypes(), packageType, packageTypes);
+ }
+ }
+ }
}
}
return packageTypes;
@@ -515,7 +520,6 @@
*/
protected void resolvedTypes(Connection conn, String schemaPattern, DDLParser parser,
List<UnresolvedType> unresolvedTypes, DatabaseType databaseType, List<PLSQLPackageType> processedPackages) throws ParseException {
-
// need to process non '%' named items 1st such that we can resolve the '%' ones later
List<String> percentNameList = new ArrayList<String>();
List<String> nonPercentNameList = new ArrayList<String>();
@@ -658,6 +662,7 @@
for (PLSQLPackageType pkg : processedPackages) {
if (pkg.getPackageName().equals(typeName1)) {
plsqlPkg = pkg;
+ break;
}
}
}