Skip to content
This repository was archived by the owner on Jan 28, 2021. It is now read-only.

Commit 0fd0480

Browse files
Manage OR REPLACE cases in VIEW creation
Signed-off-by: Alejandro García Montoro <alejandro.garciamontoro@gmail.com>
1 parent 676f862 commit 0fd0480

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

sql/parse/views.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ func parseCreateView(ctx *sql.Context, s string) (sql.Node, error) {
5353
return nil, ErrMalformedViewName.New(strings.Join(scopedName, "."))
5454
}
5555

56+
// TODO(agarciamontoro): Add support for explicit column names
57+
if len(columns) != 0 {
58+
return nil, ErrUnsupportedSyntax.New("the view creation must not specify explicit column names")
59+
}
60+
5661
if len(scopedName) == 1 {
5762
viewName = scopedName[0]
5863
}
@@ -79,6 +84,6 @@ func parseCreateView(ctx *sql.Context, s string) (sql.Node, error) {
7984
subqueryAlias := plan.NewSubqueryAlias(viewName, subqueryNode)
8085

8186
return plan.NewCreateView(
82-
sql.UnresolvedDatabase(databaseName), viewName, columns, subqueryAlias,
87+
sql.UnresolvedDatabase(databaseName), viewName, columns, subqueryAlias, isReplace,
8388
), nil
8489
}

sql/plan/create_view.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,23 @@ type CreateView struct {
1313
Name string
1414
Columns []string
1515
Catalog *sql.Catalog
16+
IsReplace bool
1617
}
1718

1819
func NewCreateView(
1920
database sql.Database,
2021
name string,
2122
columns []string,
2223
definition *SubqueryAlias,
24+
isReplace bool,
2325
) *CreateView {
2426
return &CreateView{
2527
UnaryNode{Child: definition},
2628
database,
2729
name,
2830
columns,
2931
nil,
32+
isReplace,
3033
}
3134
}
3235

@@ -45,6 +48,10 @@ func (create *CreateView) Resolved() bool {
4548
func (create *CreateView) RowIter(ctx *sql.Context) (sql.RowIter, error) {
4649
view := sql.View{create.Name, create.Child}
4750

51+
if create.IsReplace {
52+
_ = create.Catalog.ViewRegistry.Delete(create.database.Name(), view.Name)
53+
}
54+
4855
return sql.RowsToRowIter(), create.Catalog.ViewRegistry.Register(create.database.Name(), view)
4956
}
5057

0 commit comments

Comments
 (0)