@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; }