Example #1
0
 @Override
 public int update() {
   session.commit(true);
   session.getUser().checkAdmin();
   Database db = session.getDatabase();
   TableView view = null;
   Table old = getSchema().findTableOrView(session, viewName);
   if (old != null) {
     if (ifNotExists) {
       return 0;
     }
     if (!orReplace || !Table.VIEW.equals(old.getTableType())) {
       throw DbException.get(ErrorCode.VIEW_ALREADY_EXISTS_1, viewName);
     }
     view = (TableView) old;
   }
   int id = getObjectId();
   String querySQL;
   if (select == null) {
     querySQL = selectSQL;
   } else {
     ArrayList<Parameter> params = select.getParameters();
     if (params != null && params.size() > 0) {
       throw DbException.getUnsupportedException("parameters in views");
     }
     querySQL = select.getPlanSQL();
   }
   // The view creates a Prepared command object, which belongs to a
   // session, so we pass the system session down.
   Session sysSession = db.getSystemSession();
   synchronized (sysSession) {
     try {
       if (view == null) {
         Schema schema = session.getDatabase().getSchema(session.getCurrentSchemaName());
         sysSession.setCurrentSchema(schema);
         Column[] columnTemplates = null;
         if (columnNames != null) {
           columnTemplates = new Column[columnNames.length];
           for (int i = 0; i < columnNames.length; ++i) {
             columnTemplates[i] = new Column(columnNames[i], Value.UNKNOWN);
           }
         }
         view =
             new TableView(
                 getSchema(), id, viewName, querySQL, null, columnTemplates, sysSession, false);
       } else {
         view.replace(querySQL, columnNames, sysSession, false, force);
         view.setModified();
       }
     } finally {
       sysSession.setCurrentSchema(db.getSchema(Constants.SCHEMA_MAIN));
     }
   }
   if (comment != null) {
     view.setComment(comment);
   }
   if (old == null) {
     db.addSchemaObject(session, view);
   } else {
     db.updateMeta(session, view);
   }
   return 0;
 }