String remarks = row.getString("REMARKS");
if (remarks != null) {
remarks = remarks.replace("''", "'"); //come back escaped sometimes
}
View view = new View().setName(cleanNameFromDatabase(rawViewName, database));
view.setRemarks(remarks);
CatalogAndSchema schemaFromJdbcInfo = ((AbstractJdbcDatabase) database).getSchemaFromJdbcInfo(rawCatalogName, rawSchemaName);
view.setSchema(new Schema(schemaFromJdbcInfo.getCatalogName(), schemaFromJdbcInfo.getSchemaName()));
try {
String definition = database.getViewDefinition(schemaFromJdbcInfo, view.getName());
if (definition.startsWith("FULL_DEFINITION: ")) {
definition = definition.replaceFirst("^FULL_DEFINITION: ", "");
view.setContainsFullDefinition(true);
}
if (database instanceof InformixDatabase) {
// Cleanup
definition = definition.trim();
definition = definition.replaceAll("\\s*,\\s*", ", ");
definition = definition.replaceAll("\\s*;", "");
// Strip the schema definition because it can optionally be included in the tag attribute
definition = definition.replaceAll("(?i)\""+view.getSchema().getName()+"\"\\.", "");
}
view.setDefinition(definition);
} catch (DatabaseException e) {
throw new DatabaseException("Error getting " + database.getConnection().getURL() + " view with " + new GetViewDefinitionStatement(view.getSchema().getCatalogName(), view.getSchema().getName(), rawViewName), e);
}
return view;
} else {
return null;