提交 e8cccd33 authored 作者: lukaseder's avatar lukaseder

[#285] Add support for ALTER VIEW IF EXISTS

上级 eadac55f
......@@ -380,7 +380,7 @@ ALTER USER SA SET PASSWORD 'rioyxlgt'
"
"Commands (DDL)","ALTER VIEW","
ALTER VIEW viewName RECOMPILE
ALTER VIEW [ IF EXISTS ] viewName RECOMPILE
","
Recompiles a view after the underlying tables have been changed or created.
This command is used for views created using CREATE FORCE VIEW.
......
......@@ -4866,9 +4866,11 @@ public class Parser {
private AlterView parseAlterView() {
AlterView command = new AlterView(session);
boolean ifExists = readIfExists(false);
command.setIfExists(ifExists);
String viewName = readIdentifierWithSchema();
Table tableView = getSchema().findTableOrView(session, viewName);
if (!(tableView instanceof TableView)) {
if (!(tableView instanceof TableView) && !ifExists) {
throw DbException.get(ErrorCode.VIEW_NOT_FOUND_1, viewName);
}
TableView view = (TableView) tableView;
......
......@@ -17,12 +17,17 @@ import org.h2.table.TableView;
*/
public class AlterView extends DefineCommand {
private boolean ifExists;
private TableView view;
public AlterView(Session session) {
super(session);
}
public void setIfExists(boolean b) {
ifExists = b;
}
public void setView(TableView view) {
this.view = view;
}
......@@ -30,6 +35,9 @@ public class AlterView extends DefineCommand {
@Override
public int update() {
session.commit(true);
if (view == null && ifExists) {
return 0;
}
session.getUser().checkRight(view, Right.ALL);
DbException e = view.recompile(session, false, true);
if (e != null) {
......
......@@ -138,7 +138,7 @@ ALTER USER userName SET { PASSWORD string | SALT bytes HASH bytes }
","
Changes the password of a user."
"Commands (DDL)","ALTER VIEW","
ALTER VIEW viewName RECOMPILE
ALTER VIEW [ IF EXISTS ] viewName RECOMPILE
","
Recompiles a view after the underlying tables have been changed or created."
"Commands (DDL)","ANALYZE","
......
......@@ -2991,6 +2991,12 @@ CREATE memory TABLE ADDRESS(ID INT);
alter view address_view recompile;
> ok
alter view if exists address_view recompile;
> ok
alter view if exists doesnt_exist recompile;
> ok
select * from ADDRESS_VIEW;
> ID
> --
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论