RowIter implements sql.ExecSourceRel.
(ctx *sql.Context, r sql.Row)
| 91 | |
| 92 | // RowIter implements sql.ExecSourceRel. |
| 93 | func (v *ValidateConstraint) RowIter(ctx *sql.Context, r sql.Row) (sql.RowIter, error) { |
| 94 | db, err := v.DbProvider.Database(ctx, ctx.GetCurrentDatabase()) |
| 95 | if err != nil { |
| 96 | return nil, err |
| 97 | } |
| 98 | |
| 99 | schemaName := v.schemaName |
| 100 | if schemaName == "" { |
| 101 | schemaName, err = core.GetCurrentSchema(ctx) |
| 102 | if err != nil { |
| 103 | return nil, err |
| 104 | } |
| 105 | } |
| 106 | schemaDb, ok := db.(sql.SchemaDatabase) |
| 107 | if !ok { |
| 108 | return nil, errors.Errorf("database does not support schemas") |
| 109 | } |
| 110 | dbSchema, ok, err := schemaDb.GetSchema(ctx, schemaName) |
| 111 | if err != nil { |
| 112 | return nil, err |
| 113 | } |
| 114 | if !ok { |
| 115 | return nil, errors.Errorf("schema %s does not exist", schemaName) |
| 116 | } |
| 117 | tblNode, _, err := dbSchema.GetTableInsensitive(ctx, v.tableName) |
| 118 | if err != nil { |
| 119 | return nil, err |
| 120 | } |
| 121 | if tblNode == nil { |
| 122 | return nil, sql.ErrTableNotFound.New(v.tableName) |
| 123 | } |
| 124 | |
| 125 | // validate foreign key constraint |
| 126 | if fkTbl, ok := tblNode.(sql.ForeignKeyTable); ok { |
| 127 | fks, err := fkTbl.GetDeclaredForeignKeys(ctx) |
| 128 | if err != nil { |
| 129 | return nil, err |
| 130 | } |
| 131 | for _, fk := range fks { |
| 132 | if strings.EqualFold(fk.Name, v.constraintName) { |
| 133 | return v.validateForeignKey(ctx, db, fkTbl, fk) |
| 134 | } |
| 135 | } |
| 136 | } |
| 137 | |
| 138 | // validate check constraint |
| 139 | if checkTbl, ok := tblNode.(sql.CheckTable); ok { |
| 140 | checks, err := checkTbl.GetChecks(ctx) |
| 141 | if err != nil { |
| 142 | return nil, err |
| 143 | } |
| 144 | for _, check := range checks { |
| 145 | if strings.EqualFold(check.Name, v.constraintName) { |
| 146 | return v.validateCheckConstraint(ctx, tblNode, check) |
| 147 | } |
| 148 | } |
| 149 | } |
| 150 |
nothing calls this directly
no test coverage detected