diff --git a/enginetest/mysqlshim/database.go b/enginetest/mysqlshim/database.go index f800e6344e..2a3fbb959f 100644 --- a/enginetest/mysqlshim/database.go +++ b/enginetest/mysqlshim/database.go @@ -278,8 +278,8 @@ func (d Database) DropView(ctx *sql.Context, name string) error { return d.shim.Exec(d.name, fmt.Sprintf("DROP VIEW `%s`;", name)) } -// GetViewDefinition implements the interface sql.ViewDatabase. -func (d Database) GetViewDefinition(ctx *sql.Context, viewName string) (sql.ViewDefinition, bool, error) { +// GetViewDefinitionAsOf implements the interface sql.ViewDatabase. +func (d Database) GetViewDefinitionAsOf(ctx *sql.Context, viewName string, asOf interface{}) (sql.ViewDefinition, bool, error) { views, err := d.AllViews(ctx) if err != nil { return sql.ViewDefinition{}, false, err diff --git a/memory/database.go b/memory/database.go index 41b7fa4fe4..310e993fa6 100644 --- a/memory/database.go +++ b/memory/database.go @@ -589,8 +589,8 @@ func (d *Database) AllViews(ctx *sql.Context) ([]sql.ViewDefinition, error) { return views, nil } -// GetViewDefinition implements the interface sql.ViewDatabase. -func (d *Database) GetViewDefinition(ctx *sql.Context, viewName string) (sql.ViewDefinition, bool, error) { +// GetViewDefinitionAsOf implements the interface sql.ViewDatabase. +func (d *Database) GetViewDefinitionAsOf(ctx *sql.Context, viewName string, asOf interface{}) (sql.ViewDefinition, bool, error) { viewDef, ok := d.views[strings.ToLower(viewName)] return viewDef, ok, nil } diff --git a/sql/databases.go b/sql/databases.go index e1ec634ace..66924da308 100644 --- a/sql/databases.go +++ b/sql/databases.go @@ -301,8 +301,8 @@ type ViewDatabase interface { // ErrViewDoesNotExist DropView(ctx *Context, name string) error - // GetViewDefinition returns the ViewDefinition of the view with the name given, or false if it doesn't exist. - GetViewDefinition(ctx *Context, viewName string) (ViewDefinition, bool, error) + // GetViewDefinitionAsOf returns the ViewDefinition of the view with the name given, or false if it doesn't exist. + GetViewDefinitionAsOf(ctx *Context, viewName string, asOf interface{}) (ViewDefinition, bool, error) // AllViews returns the definitions of all views in the database AllViews(ctx *Context) ([]ViewDefinition, error) diff --git a/sql/mysql_db/privileged_database_provider.go b/sql/mysql_db/privileged_database_provider.go index 1a50015094..3f2cca1704 100644 --- a/sql/mysql_db/privileged_database_provider.go +++ b/sql/mysql_db/privileged_database_provider.go @@ -399,12 +399,13 @@ func (pdb PrivilegedDatabase) DropView(ctx *sql.Context, name string) error { return sql.ErrViewsNotSupported.New(pdb.db.Name()) } -// GetViewDefinition implements sql.ViewDatabase -func (pdb PrivilegedDatabase) GetViewDefinition(ctx *sql.Context, viewName string) (sql.ViewDefinition, bool, error) { - if db, ok := pdb.db.(sql.ViewDatabase); ok { - return db.GetViewDefinition(ctx, viewName) +// GetViewDefinitionAsOf implements sql.ViewDatabase +func (pdb PrivilegedDatabase) GetViewDefinitionAsOf(ctx *sql.Context, viewName string, asOf interface{}) (sql.ViewDefinition, bool, error) { + db, ok := pdb.db.(sql.ViewDatabase) + if !ok { + return sql.ViewDefinition{}, false, sql.ErrViewsNotSupported.New(pdb.db.Name()) } - return sql.ViewDefinition{}, false, sql.ErrViewsNotSupported.New(pdb.db.Name()) + return db.GetViewDefinitionAsOf(ctx, viewName, asOf) } // AllViews implements sql.ViewDatabase diff --git a/sql/plan/alter_table.go b/sql/plan/alter_table.go index 5154266487..e52b99eff0 100644 --- a/sql/plan/alter_table.go +++ b/sql/plan/alter_table.go @@ -162,7 +162,7 @@ func (r *RenameTable) renameTable(ctx *sql.Context, renamer sql.TableRenamer, tb func (r *RenameTable) renameView(ctx *sql.Context, viewDb sql.ViewDatabase, vr *sql.ViewRegistry, oldName, newName string) (bool, error) { if viewDb != nil { - oldView, exists, err := viewDb.GetViewDefinition(ctx, oldName) + oldView, exists, err := viewDb.GetViewDefinitionAsOf(ctx, oldName, nil) if err != nil { return false, err } else if !exists { diff --git a/sql/planbuilder/from.go b/sql/planbuilder/from.go index c7070fe69f..2981e78b18 100644 --- a/sql/planbuilder/from.go +++ b/sql/planbuilder/from.go @@ -813,7 +813,7 @@ func (b *Builder) resolveView(name string, database sql.Database, asOf interface var view *sql.View if vdb, vok := database.(sql.ViewDatabase); vok { - viewDef, vdok, err := vdb.GetViewDefinition(b.ctx, name) + viewDef, vdok, err := vdb.GetViewDefinitionAsOf(b.ctx, name, asOf) if err != nil { b.handleErr(err) } diff --git a/sql/rowexec/create_view_test.go b/sql/rowexec/create_view_test.go index c04777cd8b..43ea23be57 100644 --- a/sql/rowexec/create_view_test.go +++ b/sql/rowexec/create_view_test.go @@ -91,7 +91,7 @@ func TestReplaceExistingViewNative(t *testing.T) { require.NoError(t, err) expectedViewTextDef := createView.Definition.TextDefinition - view, ok, err := db.GetViewDefinition(ctx, createView.Name) + view, ok, err := db.GetViewDefinitionAsOf(ctx, createView.Name, nil) require.NoError(t, err) require.True(t, ok) require.Equal(t, expectedViewTextDef, view.TextDefinition) @@ -114,7 +114,7 @@ func TestReplaceExistingViewNative(t *testing.T) { _, err = DefaultBuilder.buildNodeExec(ctx, createView, nil) require.NoError(t, err) - view, ok, err = db.GetViewDefinition(ctx, createView.Name) + view, ok, err = db.GetViewDefinitionAsOf(ctx, createView.Name, nil) require.NoError(t, err) require.True(t, ok) require.Equal(t, subqueryAlias.TextDefinition, view.TextDefinition) @@ -130,7 +130,7 @@ func TestCreateViewNative(t *testing.T) { _, err := DefaultBuilder.buildNodeExec(ctx, createView, nil) require.NoError(t, err) - actualView, ok, err := db.GetViewDefinition(ctx, createView.Name) + actualView, ok, err := db.GetViewDefinitionAsOf(ctx, createView.Name, nil) require.True(t, ok) require.NoError(t, err) diff --git a/sql/rowexec/ddl.go b/sql/rowexec/ddl.go index 21335e318c..239f5780e2 100644 --- a/sql/rowexec/ddl.go +++ b/sql/rowexec/ddl.go @@ -996,7 +996,7 @@ func (b *BaseBuilder) buildCreateTable(ctx *sql.Context, n *plan.CreateTable, ro } if vdb, vok := n.Db.(sql.ViewDatabase); vok { - _, ok, err := vdb.GetViewDefinition(ctx, n.Name()) + _, ok, err := vdb.GetViewDefinitionAsOf(ctx, n.Name(), nil) if err != nil { return nil, err } diff --git a/sql/rowexec/drop_view_test.go b/sql/rowexec/drop_view_test.go index 8d2a3cdf6a..c76dbde4f5 100644 --- a/sql/rowexec/drop_view_test.go +++ b/sql/rowexec/drop_view_test.go @@ -114,7 +114,7 @@ func TestDropExistingViewNative(t *testing.T) { _, err := DefaultBuilder.Build(ctx, dropView, nil) require.NoError(t, err) - _, ok, err := db.GetViewDefinition(ctx, view.Name()) + _, ok, err := db.GetViewDefinitionAsOf(ctx, view.Name(), nil) require.NoError(t, err) require.False(t, ok) } @@ -135,7 +135,7 @@ func TestDropNonExistingViewNative(t *testing.T) { _, dropErr := DefaultBuilder.Build(ctx, dropView, nil) - _, ok, err := db.GetViewDefinition(ctx, view.Name()) + _, ok, err := db.GetViewDefinitionAsOf(ctx, view.Name(), nil) require.NoError(t, err) require.True(t, ok)