Bug #461188 - Test failures exist in test-dbws-builder-oracle target
Signed-off-by: Petros Splinakis <petros.splinakis@oracle.com>
Reviewed-by: Lukas Jungmann <lukas.jungmann@oracle.com>
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 6fcf928..a96095e 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
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2011, 2014 Oracle. All rights reserved.
+ * Copyright (c) 2011, 2015 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
@@ -609,6 +609,12 @@
int idx = tableName.indexOf(ROWTYPE_MACRO);
tableName = tableName.substring(0,idx);
}
+ if (tableName.indexOf('.') > 0) {
+ String prefix = tableName.substring(0, tableName.indexOf('.'));
+ if(schemaPattern.equalsIgnoreCase(prefix)) {
+ tableName = typeName.substring(schemaPattern.length() + 1);
+ }
+ }
resolvedType = (CompositeDatabaseType)typesRepository.getDatabaseType(tableName);
if (resolvedType == null) {
TableType tableType = null;
@@ -650,90 +656,10 @@
}
}
if (resolvedType == null) {
- int objectTypeCode = getObjectType(conn, schemaPattern, typeName1);
- switch (objectTypeCode) {
- case OBJECT_TYPE_FUNCTION_CODE :
- List<FunctionType> functions = buildFunctions(conn, schemaPattern, typeName1, false);
- if (functions != null && functions.size() > 0) {
- resolvedType = functions.get(0); // only care about first one
- }
- break;
- case OBJECT_TYPE_PACKAGE_CODE :
- PLSQLPackageType plsqlPkg = null;
- // we may have already processed this package
- if (processedPackages != null) {
- for (PLSQLPackageType pkg : processedPackages) {
- if (pkg.getPackageName().equals(typeName1)) {
- plsqlPkg = pkg;
- break;
- }
- }
- }
- if (plsqlPkg == null) {
- List<PLSQLPackageType> packages = buildPackages(conn, schemaPattern, typeName1, false);
- if (packages != null && packages.size() > 0) {
- plsqlPkg = packages.get(0); // only care about first one
- if (processedPackages != null) {
- processedPackages.add(plsqlPkg);
- }
- }
- }
- if (plsqlPkg != null) {
- // we may have a dotted scenario, i.e. 'PackageName.TypeName'
- if (typeName2 == null) {
- resolvedType = plsqlPkg;
- } else {
- DatabaseType dbType = findField(typeName2, plsqlPkg);
- if (dbType != null && dbType.isComposite()) {
- resolvedType = (CompositeDatabaseType) dbType;
- }
- }
- }
- break;
- case OBJECT_TYPE_PROCEDURE_CODE :
- List<ProcedureType> procedures = buildProcedures(conn, schemaPattern, typeName1, false);
- if (procedures != null && procedures.size() > 0) {
- resolvedType = procedures.get(0); // only care about first one
- }
- break;
- case OBJECT_TYPE_TABLE_CODE :
- List<TableType> tables = buildTables(conn, schemaPattern, typeName1, false);
- if (tables != null && tables.size() > 0) {
- TableType tableType = tables.get(0); // only care about first one
- resolvedType = tableType;
- if (typeName2 != null) {
- DatabaseType foundType = findField(typeName2, resolvedType);
- if (foundType != null) {
- resolvedType = (CompositeDatabaseType)foundType;
- }
- }
- // always a chance that tableType has some unresolved column type
- if (!tableType.isResolved()) {
- UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();
- unresolvedTypesVisitor.visit(tableType);
- for (UnresolvedType u2Type : unresolvedTypesVisitor.getUnresolvedTypes()) {
- if (!stac.contains(u2Type)) {
- stac.push(u2Type);
- }
- }
- }
- }
- break;
- case OBJECT_TYPE_TYPE_CODE :
- List<CompositeDatabaseType> types = buildTypes(conn, schemaPattern, typeName1, false);
- if (types != null && types.size() > 0) {
- resolvedType = types.get(0); // only care about first one
- if (typeName2 != null) {
- DatabaseType foundType = findField(typeName2, resolvedType);
- if (foundType != null) {
- resolvedType = (CompositeDatabaseType)foundType;
- }
- }
- }
- break;
- case OBJECT_TYPE_UNKNOWN_CODE :
- default :
- break;
+ if (!typeName1.equalsIgnoreCase(schemaPattern)) {
+ resolvedType = resolveType(conn, schemaPattern, typeName1, typeName2, processedPackages, stac);
+ } else {
+ resolvedType = resolveType(conn, schemaPattern, typeName2, null, processedPackages, stac);
}
}
}
@@ -780,6 +706,98 @@
}
}
+ private CompositeDatabaseType resolveType(Connection conn, String schemaPattern, String typeName1, String typeName2, List<PLSQLPackageType> processedPackages, Stack<UnresolvedType> stac) throws ParseException {
+ CompositeDatabaseType resolvedType = null;
+ int objectTypeCode = getObjectType(conn, schemaPattern, typeName1);
+ switch (objectTypeCode) {
+ case OBJECT_TYPE_FUNCTION_CODE:
+ List<FunctionType> functions = buildFunctions(conn, schemaPattern, typeName1, false);
+ if (functions != null && functions.size() > 0) {
+ resolvedType = functions.get(0); // only care about first one
+ }
+ break;
+ case OBJECT_TYPE_PACKAGE_CODE:
+ PLSQLPackageType plsqlPkg = null;
+ // we may have already processed this package
+ if (processedPackages != null) {
+ for (PLSQLPackageType pkg : processedPackages) {
+ if (pkg.getPackageName().equals(typeName1)) {
+ plsqlPkg = pkg;
+ break;
+ }
+ }
+ }
+ if (plsqlPkg == null) {
+ List<PLSQLPackageType> packages = buildPackages(conn, schemaPattern, typeName1, false);
+ if (packages != null && packages.size() > 0) {
+ plsqlPkg = packages.get(0); // only care about first one
+ if (processedPackages != null) {
+ processedPackages.add(plsqlPkg);
+ }
+ }
+ }
+ if (plsqlPkg != null) {
+ // we may have a dotted scenario, i.e. 'PackageName.TypeName'
+ if (typeName2 == null) {
+ resolvedType = plsqlPkg;
+ } else {
+ DatabaseType dbType = findField(typeName2, plsqlPkg);
+ if (dbType != null && dbType.isComposite()) {
+ resolvedType = (CompositeDatabaseType) dbType;
+ }
+ }
+ }
+ break;
+ case OBJECT_TYPE_PROCEDURE_CODE:
+ List<ProcedureType> procedures = buildProcedures(conn, schemaPattern, typeName1, false);
+ if (procedures != null && procedures.size() > 0) {
+ resolvedType = procedures.get(0); // only care about first one
+ }
+ break;
+ case OBJECT_TYPE_TABLE_CODE:
+ List<TableType> tables = buildTables(conn, schemaPattern, typeName1, false);
+ if (tables != null && tables.size() > 0) {
+ TableType tableType = tables.get(0); // only care about first
+ // one
+ resolvedType = tableType;
+ if (typeName2 != null) {
+ DatabaseType foundType = findField(typeName2, resolvedType);
+ if (foundType != null) {
+ resolvedType = (CompositeDatabaseType) foundType;
+ }
+ }
+ // always a chance that tableType has some unresolved column
+ // type
+ if (!tableType.isResolved()) {
+ UnresolvedTypesVisitor unresolvedTypesVisitor = new UnresolvedTypesVisitor();
+ unresolvedTypesVisitor.visit(tableType);
+ for (UnresolvedType u2Type : unresolvedTypesVisitor.getUnresolvedTypes()) {
+ if (!stac.contains(u2Type)) {
+ stac.push(u2Type);
+ }
+ }
+ }
+ }
+ break;
+ case OBJECT_TYPE_TYPE_CODE:
+ List<CompositeDatabaseType> types = buildTypes(conn, schemaPattern, typeName1, false);
+ if (types != null && types.size() > 0) {
+ resolvedType = types.get(0); // only care about first one
+ if (typeName2 != null) {
+ DatabaseType foundType = findField(typeName2, resolvedType);
+ if (foundType != null) {
+ resolvedType = (CompositeDatabaseType) foundType;
+ }
+ }
+ }
+ break;
+ case OBJECT_TYPE_UNKNOWN_CODE:
+ default:
+ break;
+ }
+ return resolvedType;
+ }
+
/**
* Attempt to determine the database type (Function, Package, Table, etc.) for a
* given a Schema and Type name.