public static void createView (Hashtable tables, Hashtable views, String ddl) {
try {
String viewName;
Regex viewDDLRegex1 = new Regex("CREATE\\s+VIEW\\s+(\\S+)", Regex.CASE_INSENSITIVE_MASK);
if (!viewDDLRegex1.contains(ddl)) {
throw new Exception("undefined view name in ddl: "+ddl);
}
viewName = viewDDLRegex1.getGroup(1);
if (debug >= 1) System.out.println(lineSeparator+" Creating View '"+viewName+"'...");
Hashtable view = new Hashtable();
views.put(viewName, view);
view.put("name", viewName);
view.put("className", viewName + "ViewTable");
view.put("type", "ViewTable");
if (packageName == null)
view.put("fullClassName", viewName + "ViewTable");
else
view.put("fullClassName", packageName + "." + viewName + "ViewTable");
String columnNames = null;
Regex viewDDLRegex2 = new Regex("CREATE\\s+VIEW\\s+\\S+\\s*\\((.*)\\)", Regex.CASE_INSENSITIVE_MASK);
if (viewDDLRegex2.contains(ddl)){
columnNames = viewDDLRegex2.getGroup(1);
}
if (debug >= 2) System.out.println(lineSeparator+" Columns '"+columnNames+"'");
String selectFields;
Regex viewDDLRegex3 = new Regex("SELECT\\s+DISTINCT\\s+(.*)\\s+FROM", Regex.CASE_INSENSITIVE_MASK);
Regex viewDDLRegex4 = new Regex("SELECT\\s+(.*)\\s+FROM", Regex.CASE_INSENSITIVE_MASK);
if (viewDDLRegex3.contains(ddl)) {
selectFields = viewDDLRegex3.getGroup(1);
} else if (viewDDLRegex4.contains(ddl)) {
selectFields = viewDDLRegex4.getGroup(1);
} else {
throw new Exception("no select columns in create view ddl: "+ddl);
}
if (debug >= 2) System.out.println(lineSeparator+" Select Fields '"+selectFields+"'");
String tableNames;
Regex viewDDLRegex5 = new Regex("FROM\\s+(.*)\\s+WHERE", Regex.CASE_INSENSITIVE_MASK);
Regex viewDDLRegex6 = new Regex("FROM\\s+(.*)", Regex.CASE_INSENSITIVE_MASK);
if (viewDDLRegex5.contains(ddl)) {
tableNames = viewDDLRegex5.getGroup(1);
} else if (viewDDLRegex6.contains(ddl)) {
tableNames = viewDDLRegex6.getGroup(1);
} else {
throw new Exception("no tables in create view ddl: "+ddl);
}
Regex viewDDLRegex7 = new Regex(",", Regex.CASE_INSENSITIVE_MASK);
List vTableNames = viewDDLRegex7.split(tableNames);
Vector vTables = new Vector();
for (Iterator it = vTableNames.iterator(); it.hasNext(); ) {
String tableName = (String) it.next();