diff --git a/sql/analyzer/validate_create_table.go b/sql/analyzer/validate_create_table.go index e1031f4d70..2300ead6d3 100644 --- a/sql/analyzer/validate_create_table.go +++ b/sql/analyzer/validate_create_table.go @@ -258,7 +258,7 @@ func resolveAlterColumn(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan.S return nil, transform.SameTree, err } - sch, err = validateAddColumn(initialSch, sch, n.(*plan.AddColumn)) + sch, err = ValidateAddColumn(sch, n.(*plan.AddColumn)) if err != nil { return nil, transform.SameTree, err } @@ -395,7 +395,10 @@ func validateRenameColumn(initialSch, sch sql.Schema, rc *plan.RenameColumn) (sq return renameInSchema(sch, rc.ColumnName, rc.NewColumnName, nameable.Name()), nil } -func validateAddColumn(initialSch sql.Schema, schema sql.Schema, ac *plan.AddColumn) (sql.Schema, error) { +// ValidateAddColumn validates that the column specified in |ac| can be added to the specified +// |schema|. A new Schema is returned, with the added column, if the column can be added. Otherwise, +// an error is returned if there are any validation errors. +func ValidateAddColumn(schema sql.Schema, ac *plan.AddColumn) (sql.Schema, error) { table := ac.Table nameable := table.(sql.Nameable) @@ -828,8 +831,6 @@ func validateAutoIncrementAdd(schema sql.Schema, keyColumns map[string]bool) err return nil } -const textIndexPrefix = 1000 - func schToColMap(sch sql.Schema) map[string]*sql.Column { colMap := make(map[string]*sql.Column, len(sch)) for _, col := range sch { diff --git a/sql/plan/alter_index.go b/sql/plan/alter_index.go index 6abddef049..c81c5e4f01 100644 --- a/sql/plan/alter_index.go +++ b/sql/plan/alter_index.go @@ -138,6 +138,11 @@ func (p AlterIndex) WithChildren(children ...sql.Node) (sql.Node, error) { } } +func (p AlterIndex) WithColumns(columns []sql.IndexColumn) (sql.Node, error) { + p.Columns = columns + return &p, nil +} + func (p AlterIndex) WithTargetSchema(schema sql.Schema) (sql.Node, error) { p.targetSchema = schema return &p, nil diff --git a/sql/plan/ddl.go b/sql/plan/ddl.go index d822ae660c..d1c9a187ce 100644 --- a/sql/plan/ddl.go +++ b/sql/plan/ddl.go @@ -133,6 +133,14 @@ func (c *CreateTable) WithDatabase(db sql.Database) (sql.Node, error) { return &nc, nil } +// WithIndexDefs returns a copy of this CreateTable instance, with the index definitions +// set to |idxDefs|. +func (c *CreateTable) WithIndexDefs(idxDefs sql.IndexDefs) (*CreateTable, error) { + nc := *c + nc.idxDefs = idxDefs + return &nc, nil +} + // Name implements the Nameable interface. func (c *CreateTable) Name() string { return c.name