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;