Skip to content

Commit de954e3

Browse files
author
James Cor
committed
allow for as of for views
1 parent 34df154 commit de954e3

File tree

8 files changed

+22
-17
lines changed

8 files changed

+22
-17
lines changed

memory/database.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,8 +589,8 @@ func (d *Database) AllViews(ctx *sql.Context) ([]sql.ViewDefinition, error) {
589589
return views, nil
590590
}
591591

592-
// GetViewDefinition implements the interface sql.ViewDatabase.
593-
func (d *Database) GetViewDefinition(ctx *sql.Context, viewName string) (sql.ViewDefinition, bool, error) {
592+
// GetViewDefinitionAsOf implements the interface sql.ViewDatabase.
593+
func (d *Database) GetViewDefinitionAsOf(ctx *sql.Context, viewName string, asOf interface{}) (sql.ViewDefinition, bool, error) {
594594
viewDef, ok := d.views[strings.ToLower(viewName)]
595595
return viewDef, ok, nil
596596
}

sql/databases.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,8 @@ type ViewDatabase interface {
301301
// ErrViewDoesNotExist
302302
DropView(ctx *Context, name string) error
303303

304-
// GetViewDefinition returns the ViewDefinition of the view with the name given, or false if it doesn't exist.
305-
GetViewDefinition(ctx *Context, viewName string) (ViewDefinition, bool, error)
304+
// GetViewDefinitionAsOf returns the ViewDefinition of the view with the name given, or false if it doesn't exist.
305+
GetViewDefinitionAsOf(ctx *Context, viewName string, asOf interface{}) (ViewDefinition, bool, error)
306306

307307
// AllViews returns the definitions of all views in the database
308308
AllViews(ctx *Context) ([]ViewDefinition, error)

sql/mysql_db/privileged_database_provider.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -399,12 +399,13 @@ func (pdb PrivilegedDatabase) DropView(ctx *sql.Context, name string) error {
399399
return sql.ErrViewsNotSupported.New(pdb.db.Name())
400400
}
401401

402-
// GetViewDefinition implements sql.ViewDatabase
403-
func (pdb PrivilegedDatabase) GetViewDefinition(ctx *sql.Context, viewName string) (sql.ViewDefinition, bool, error) {
404-
if db, ok := pdb.db.(sql.ViewDatabase); ok {
405-
return db.GetViewDefinition(ctx, viewName)
402+
// GetViewDefinitionAsOf implements sql.ViewDatabase
403+
func (pdb PrivilegedDatabase) GetViewDefinitionAsOf(ctx *sql.Context, viewName string, asOf interface{}) (sql.ViewDefinition, bool, error) {
404+
db, ok := pdb.db.(sql.ViewDatabase)
405+
if !ok {
406+
return sql.ViewDefinition{}, false, sql.ErrViewsNotSupported.New(pdb.db.Name())
406407
}
407-
return sql.ViewDefinition{}, false, sql.ErrViewsNotSupported.New(pdb.db.Name())
408+
return db.GetViewDefinitionAsOf(ctx, viewName, asOf)
408409
}
409410

410411
// AllViews implements sql.ViewDatabase

sql/plan/alter_table.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ func (r *RenameTable) renameTable(ctx *sql.Context, renamer sql.TableRenamer, tb
162162

163163
func (r *RenameTable) renameView(ctx *sql.Context, viewDb sql.ViewDatabase, vr *sql.ViewRegistry, oldName, newName string) (bool, error) {
164164
if viewDb != nil {
165-
oldView, exists, err := viewDb.GetViewDefinition(ctx, oldName)
165+
oldView, exists, err := viewDb.GetViewDefinitionAsOf(ctx, oldName, nil)
166166
if err != nil {
167167
return false, err
168168
} else if !exists {

sql/planbuilder/from.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,10 @@ func (b *Builder) buildResolvedTable(inScope *scope, db, schema, name string, as
679679
asOfLit = asof
680680
}
681681

682+
if asOfLit != nil {
683+
print()
684+
}
685+
682686
if view := b.resolveView(name, database, asOfLit); view != nil {
683687
// TODO: Schema name
684688
return resolvedViewScope(outScope, view, db, name)
@@ -813,7 +817,7 @@ func (b *Builder) resolveView(name string, database sql.Database, asOf interface
813817
var view *sql.View
814818

815819
if vdb, vok := database.(sql.ViewDatabase); vok {
816-
viewDef, vdok, err := vdb.GetViewDefinition(b.ctx, name)
820+
viewDef, vdok, err := vdb.GetViewDefinitionAsOf(b.ctx, name, asOf)
817821
if err != nil {
818822
b.handleErr(err)
819823
}

sql/rowexec/create_view_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func TestReplaceExistingViewNative(t *testing.T) {
9191
require.NoError(t, err)
9292

9393
expectedViewTextDef := createView.Definition.TextDefinition
94-
view, ok, err := db.GetViewDefinition(ctx, createView.Name)
94+
view, ok, err := db.GetViewDefinitionAsOf(ctx, createView.Name, nil)
9595
require.NoError(t, err)
9696
require.True(t, ok)
9797
require.Equal(t, expectedViewTextDef, view.TextDefinition)
@@ -114,7 +114,7 @@ func TestReplaceExistingViewNative(t *testing.T) {
114114
_, err = DefaultBuilder.buildNodeExec(ctx, createView, nil)
115115
require.NoError(t, err)
116116

117-
view, ok, err = db.GetViewDefinition(ctx, createView.Name)
117+
view, ok, err = db.GetViewDefinitionAsOf(ctx, createView.Name, nil)
118118
require.NoError(t, err)
119119
require.True(t, ok)
120120
require.Equal(t, subqueryAlias.TextDefinition, view.TextDefinition)
@@ -130,7 +130,7 @@ func TestCreateViewNative(t *testing.T) {
130130
_, err := DefaultBuilder.buildNodeExec(ctx, createView, nil)
131131
require.NoError(t, err)
132132

133-
actualView, ok, err := db.GetViewDefinition(ctx, createView.Name)
133+
actualView, ok, err := db.GetViewDefinitionAsOf(ctx, createView.Name, nil)
134134

135135
require.True(t, ok)
136136
require.NoError(t, err)

sql/rowexec/ddl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,7 @@ func (b *BaseBuilder) buildCreateTable(ctx *sql.Context, n *plan.CreateTable, ro
996996
}
997997

998998
if vdb, vok := n.Db.(sql.ViewDatabase); vok {
999-
_, ok, err := vdb.GetViewDefinition(ctx, n.Name())
999+
_, ok, err := vdb.GetViewDefinitionAsOf(ctx, n.Name(), nil)
10001000
if err != nil {
10011001
return nil, err
10021002
}

sql/rowexec/drop_view_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func TestDropExistingViewNative(t *testing.T) {
114114
_, err := DefaultBuilder.Build(ctx, dropView, nil)
115115
require.NoError(t, err)
116116

117-
_, ok, err := db.GetViewDefinition(ctx, view.Name())
117+
_, ok, err := db.GetViewDefinitionAsOf(ctx, view.Name(), nil)
118118
require.NoError(t, err)
119119
require.False(t, ok)
120120
}
@@ -135,7 +135,7 @@ func TestDropNonExistingViewNative(t *testing.T) {
135135

136136
_, dropErr := DefaultBuilder.Build(ctx, dropView, nil)
137137

138-
_, ok, err := db.GetViewDefinition(ctx, view.Name())
138+
_, ok, err := db.GetViewDefinitionAsOf(ctx, view.Name(), nil)
139139
require.NoError(t, err)
140140
require.True(t, ok)
141141

0 commit comments

Comments
 (0)