RowIter implements the interface sql.ExecSourceRel.
(ctx *sql.Context, r sql.Row)
| 76 | |
| 77 | // RowIter implements the interface sql.ExecSourceRel. |
| 78 | func (c *AlterSequence) RowIter(ctx *sql.Context, r sql.Row) (sql.RowIter, error) { |
| 79 | targetSchema, err := core.GetSchemaName(ctx, nil, c.targetSchema) |
| 80 | if err != nil { |
| 81 | return nil, err |
| 82 | } |
| 83 | target := id.NewSequence(targetSchema, c.targetSequence) |
| 84 | collection, err := core.GetSequencesCollectionFromContext(ctx, ctx.GetCurrentDatabase()) |
| 85 | if err != nil { |
| 86 | return nil, err |
| 87 | } |
| 88 | if !collection.HasSequence(ctx, target) { |
| 89 | if c.ifExists { |
| 90 | return sql.RowsToRowIter(), nil |
| 91 | } |
| 92 | return nil, errors.Errorf(`relation "%s" does not exist`, c.targetSequence) |
| 93 | } |
| 94 | seq, err := collection.GetSequence(ctx, target) |
| 95 | if err != nil { |
| 96 | return nil, err |
| 97 | } |
| 98 | |
| 99 | if c.ownedBy.IsSet { |
| 100 | if len(c.ownedBy.Table) > 0 { |
| 101 | relationType, err := core.GetRelationType(ctx, targetSchema, c.ownedBy.Table) |
| 102 | if err != nil { |
| 103 | return nil, err |
| 104 | } |
| 105 | if relationType == core.RelationType_DoesNotExist { |
| 106 | return nil, errors.Errorf(`relation "%s" does not exist`, c.ownedBy.Table) |
| 107 | } else if relationType != core.RelationType_Table { |
| 108 | return nil, errors.Errorf(`sequence cannot be owned by relation "%s"`, c.ownedBy.Table) |
| 109 | } |
| 110 | |
| 111 | table, err := core.GetSqlTableFromContext(ctx, "", doltdb.TableName{Name: c.ownedBy.Table, Schema: targetSchema}) |
| 112 | if err != nil { |
| 113 | return nil, err |
| 114 | } |
| 115 | if table == nil { |
| 116 | return nil, errors.Errorf(`table "%s" cannot be found but says it exists`, c.ownedBy.Table) |
| 117 | } |
| 118 | var tableColumn *sql.Column |
| 119 | for _, col := range table.Schema(ctx) { |
| 120 | if col.Name == c.ownedBy.Column { |
| 121 | tableColumn = col.Copy() |
| 122 | break |
| 123 | } |
| 124 | } |
| 125 | if tableColumn == nil { |
| 126 | return nil, errors.Errorf(`column "%s" of relation "%s" does not exist`, |
| 127 | c.ownedBy.Column, c.ownedBy.Table) |
| 128 | } |
| 129 | // We've verified the existence of the table's column, so we can assign it now |
| 130 | seq.OwnerTable = id.NewTable(targetSchema, c.ownedBy.Table) |
| 131 | seq.OwnerColumn = c.ownedBy.Column |
| 132 | } else { |
| 133 | seq.OwnerTable = "" |
| 134 | seq.OwnerColumn = "" |
| 135 | } |
nothing calls this directly
no test coverage detected