assignTableDef handles tree.TableDef nodes for *vitess.DDL targets. Some table defs, such as indexes, affect other defs, such as columns, and they're therefore dependent on columns being handled first. It is up to the caller to ensure that all defs have been ordered properly before calling. assignTa
(ctx *Context, node tree.TableDef, target *vitess.DDL)
| 29 | // ensure that all defs have been ordered properly before calling. assignTableDefs handles the sort for you, so this |
| 30 | // notice is only relevant when individually calling assignTableDef. |
| 31 | func assignTableDef(ctx *Context, node tree.TableDef, target *vitess.DDL) error { |
| 32 | switch node := node.(type) { |
| 33 | case *tree.CheckConstraintTableDef: |
| 34 | if target.TableSpec == nil { |
| 35 | target.TableSpec = &vitess.TableSpec{} |
| 36 | } |
| 37 | expr, err := nodeExpr(ctx, node.Expr) |
| 38 | if err != nil { |
| 39 | return err |
| 40 | } |
| 41 | target.TableSpec.Constraints = append(target.TableSpec.Constraints, &vitess.ConstraintDefinition{ |
| 42 | Name: string(node.Name), |
| 43 | Details: &vitess.CheckConstraintDefinition{ |
| 44 | Expr: expr, |
| 45 | Enforced: true, |
| 46 | }, |
| 47 | }) |
| 48 | return nil |
| 49 | case *tree.ColumnTableDef: |
| 50 | if target.TableSpec == nil { |
| 51 | target.TableSpec = &vitess.TableSpec{} |
| 52 | } |
| 53 | columnDef, err := nodeColumnTableDef(ctx, node) |
| 54 | if err != nil { |
| 55 | return err |
| 56 | } |
| 57 | target.TableSpec.AddColumn(columnDef) |
| 58 | if node.References.Table != nil { |
| 59 | fkDef, err := nodeForeignKeyDefinitionFromColumnTableDef(ctx, node.Name, node) |
| 60 | if err != nil { |
| 61 | return err |
| 62 | } |
| 63 | target.TableSpec.Constraints = append(target.TableSpec.Constraints, &vitess.ConstraintDefinition{ |
| 64 | Name: string(node.References.ConstraintName), |
| 65 | Details: fkDef, |
| 66 | }) |
| 67 | } |
| 68 | return nil |
| 69 | case *tree.ForeignKeyConstraintTableDef: |
| 70 | if target.TableSpec == nil { |
| 71 | target.TableSpec = &vitess.TableSpec{} |
| 72 | } |
| 73 | fkDef, err := nodeForeignKeyConstraintTableDef(ctx, node, false) |
| 74 | if err != nil { |
| 75 | return err |
| 76 | } |
| 77 | target.TableSpec.Constraints = append(target.TableSpec.Constraints, &vitess.ConstraintDefinition{ |
| 78 | Name: string(node.Name), |
| 79 | Details: fkDef, |
| 80 | }) |
| 81 | return nil |
| 82 | case *tree.IndexTableDef: |
| 83 | if target.TableSpec == nil { |
| 84 | target.TableSpec = &vitess.TableSpec{} |
| 85 | } |
| 86 | indexDef, err := nodeIndexTableDef(ctx, node) |
| 87 | if err != nil { |
| 88 | return err |
no test coverage detected