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