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();